Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में GROUP BY और COUNT का उपयोग करके डुप्लिकेट रिकॉर्ड्स समूहित करें और अधिकतम मान प्रदर्शित करें

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;

महत्वपूर्ण नियम

  1. SELECT सूची में सभी गैर-एग्रीगेट कॉलम GROUP BY क्लॉज में होने चाहिए
  2. एग्रीगेट फ़ंक्शन (COUNT, MAX, MIN, SUM, AVG) GROUP BY के साथ काम करते हैं
  3. HAVING क्लॉज का उपयोग समूहों को फ़िल्टर करने के लिए किया जाता है (WHERE की तरह लेकिन एग्रीगेशन के बाद)
  1. - MySQL में अलग-अलग टेबल से NULL मान अनदेखा करके NOT NULL रिकॉर्ड गिनना

    कई टेबल से NULL को छोड़कर गिनती COUNT(column) फ़ंक्शन स्वचालित रूप से NULL मानों को अनदेखा करता है। सबक्वेरी का उपयोग करके कई टेबल की गिनती एक साथ प्राप्त की जा सकती है। पहली टेबल INSERT INTO DemoTable1 VALUES(1), (NULL), (2), (3); दूसरी टेबल INSERT INTO DemoTable2 VALUES(10), (NULL), (NULL);

  1. - MySQL में तिथि के अनुसार परिणाम समूहित करना और डुप्लिकेट मानों की गिनती दिखाना

    तिथि और LIKE फ़िल्टर के साथ समूह गिनती DATE() फ़ंक्शन से केवल तिथि भाग निकालकर GROUP BY करें, और LIKE से पैटर्न मिलान करें। तालिका और डेटा (202, 2013-03-18 04:10:01); क्वेरी: 202 से शुरू होने वाले कोड की तिथिवार गिनती GROUP BY DATE(ArrivalDate); परिणाम +-------------------+-------------------

  1. - MySQL क्वेरी डुप्लिकेट टुपल्स खोजने और गिनती प्रदर्शित करने के लिए?

    डुप्लिकेट टुपल्स खोजने के लिए GROUP BY HAVING क्लॉज का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into De