GROUP BY और COUNT के साथ डुप्लिकेट रिकॉर्ड्स समूहित करना
MySQL में जब आप किसी कॉलम पर GROUP BY लागू करते हैं और साथ ही COUNT और अन्य एग्रीगेट फ़ंक्शन का उपयोग करते हैं, तो आप डुप्लिकेट मानों को समूहित करके सारांश सांख्यिकी प्राप्त कर सकते हैं।
टेबल बनाना
mysql> CREATE TABLE DemoTable (
-> ClientId INT,
-> Value INT
-> );
Query OK, 0 rows affected (0.79 sec)
डेटा डालना
mysql> INSERT INTO DemoTable VALUES (10,678);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES (20,678);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES (30,678);
Query OK, 1 row affected (0.09 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+----------+-------+
| ClientId | Value |
+----------+-------+
| 10 | 678 |
| 20 | 678 |
| 30 | 678 |
+----------+-------+
3 rows in set (0.00 sec)
GROUP BY के साथ COUNT और MAX का उपयोग
mysql> SELECT COUNT(tbl.ClientId), MAX(tbl.ClientId)
-> FROM DemoTable tbl
-> GROUP BY Value;
परिणाम
+---------------------+-------------------+
| count(tbl.ClientId) | max(tbl.ClientId) |
+---------------------+-------------------+
| 3 | 30 |
+---------------------+-------------------+
1 row in set (0.00 sec)
व्याख्या
- सभी तीन पंक्तियों में समान Value = 678 है
- GROUP BY Value उन्हें एक समूह में जोड़ता है
- COUNT(tbl.ClientId) = 3 (समूह में पंक्तियों की संख्या)
- MAX(tbl.ClientId) = 30 (समूह में उच्चतम ClientId)
आम गलतफहमी
लेख का शीर्षक "GROUP does not work if COUNT is used" भ्रामक है। GROUP BY COUNT के साथ पूरी तरह से काम करता है। वास्तव में, COUNT() GROUP BY के साथ उपयोग किए जाने वाले सबसे आम एग्रीगेट फ़ंक्शन में से एक है।
अधिक व्यावहारिक उदाहरण
-- प्रत्येक मान के लिए गिनती, न्यूनतम, अधिकतम और औसत प्राप्त करें
SELECT
Value,
COUNT(*) AS RecordCount,
MIN(ClientId) AS MinClientId,
MAX(ClientId) AS MaxClientId,
AVG(ClientId) AS AvgClientId
FROM DemoTable
GROUP BY Value;
महत्वपूर्ण नियम
- SELECT सूची में सभी गैर-एग्रीगेट कॉलम GROUP BY क्लॉज में होने चाहिए
- एग्रीगेट फ़ंक्शन (COUNT, MAX, MIN, SUM, AVG) GROUP BY के साथ काम करते हैं
- HAVING क्लॉज का उपयोग समूहों को फ़िल्टर करने के लिए किया जाता है (WHERE की तरह लेकिन एग्रीगेशन के बाद)