GROUP BY और COUNT() के साथ नामवार पंक्ति गिनती
नाम के अनुसार रिकॉर्ड्स ग्रुप करके प्रत्येक नाम की घटनाओं को नए कॉलम में गिनने के लिए GROUP BY के साथ COUNT() का उपयोग करें।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
Name VARCHAR(30)
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable VALUES ('Chris');
mysql> INSERT INTO DemoTable VALUES ('Robert');
mysql> INSERT INTO DemoTable VALUES ('Mike');
mysql> INSERT INTO DemoTable VALUES ('Robert');
mysql> INSERT INTO DemoTable VALUES ('Mike');
mysql> INSERT INTO DemoTable VALUES ('David');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+--------+ | Name | +--------+ | Chris | | Robert | | Mike | | Robert | | Mike | | David | +--------+
नाम के अनुसार ग्रुप करके काउंट नए कॉलम में प्रदर्शित करने के लिए क्वेरी:
mysql> SELECT Name, COUNT(Name) AS NumberOfRowsPerName
FROM DemoTable
GROUP BY Name;
आउटपुट:
+--------+---------------------+ | Name | NumberOfRowsPerName | +--------+---------------------+ | Chris | 1 | | Robert | 2 | | Mike | 2 | | David | 1 | +--------+---------------------+
व्याख्या:
- GROUP BY Name: समान नाम वाली पंक्तियों को एक ग्रुप में जोड़ता है
- COUNT(Name): प्रत्येक ग्रुप में पंक्तियों की संख्या गिनता है (NULL मान नहीं गिनता, लेकिन यहां NULL नहीं है)
- AS NumberOfRowsPerName: परिणाम कॉलम को अर्थपूर्ण नाम देता है
गणना:
- Chris: 1 बार
- Robert: 2 बार (पंक्ति 2 और 4)
- Mike: 2 बार (पंक्ति 3 और 5)
- David: 1 बार
वैकल्पिक COUNT(*): COUNT(*) भी समान परिणाम देगा क्योंकि कोई NULL नहीं है। COUNT(Name) केवल नॉन-NULL नाम गिनता है।
काउंट द्वारा सॉर्टिंग:
SELECT Name, COUNT(*) AS cnt FROM DemoTable GROUP BY Name ORDER BY cnt DESC;
सबसे अधिक बार आने वाले नाम पहले दिखेंगे।