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

MySQL में GROUP_CONCAT और DISTINCT के साथ डुप्लिकेट रिकॉर्ड को डिस्टिंक्ट मान और संबंधित मानों को कॉमा-सेपरेटेड लिस्ट के रूप में प्रदर्शित करना

GROUP_CONCAT() और DISTINCT के साथ डुप्लिकेट रिकॉर्ड्स को संयोजित करना

डुप्लिकेट नामों को एक पंक्ति में दिखाने और उनके डिस्टिंक्ट स्कोर को कॉमा-सेपरेटेड लिस्ट के रूप में प्रदर्शित करने के लिए GROUP_CONCAT() के साथ DISTINCT का उपयोग करें।

आइए पहले एक टेबल बनाते हैं:

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(40),
    Score INT
);

रिकॉर्ड्स इन्सर्ट करें:

mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Chris', 56);
mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Robert', 78);
mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Chris', 56);
mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Bob', 89);
mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Chris', 56);
mysql> INSERT INTO DemoTable (Name, Score) VALUES ('Chris', 57);

सभी रिकॉर्ड्स देखें:

mysql> SELECT * FROM DemoTable;

आउटपुट:

+----+--------+-------+
| Id | Name   | Score |
+----+--------+-------+
| 1  | Chris  | 56    |
| 2  | Robert | 78    |
| 3  | Chris  | 56    |
| 4  | Bob    | 89    |
| 5  | Chris  | 56    |
| 6  | Chris  | 57    |
+----+--------+-------+

नाम के अनुसार ग्रुप करके डिस्टिंक्ट स्कोर को कॉमा-सेपरेटेड लिस्ट के रूप में प्राप्त करने के लिए क्वेरी:

mysql> SELECT Name, GROUP_CONCAT(DISTINCT Score SEPARATOR ',')
    FROM DemoTable
    GROUP BY Name;

आउटपुट:

+--------+--------------------------------------------+
| Name   | GROUP_CONCAT(DISTINCT Score SEPARATOR ',') |
+--------+--------------------------------------------+
| Bob    | 89                                         |
| Chris  | 56,57                                      |
| Robert | 78                                         |
+--------+--------------------------------------------+

व्याख्या:

  • GROUP BY Name: रिकॉर्ड्स को नाम के अनुसार समूहित करता है
  • DISTINCT Score: प्रत्येक ग्रुप में डुप्लिकेट स्कोर को हटाता है (Chris के लिए 56 तीन बार था, लेकिन केवल एक बार दिखता है)
  • SEPARATOR ',': मानों को कॉमा (,) से अलग करता है
  • GROUP_CONCAT(): ग्रुप के सभी डिस्टिंक्ट मानों को एक स्ट्रिंग में जोड़ता है

उपयोग के मामले: यह पैटर्न "एक-से-अनेक" संबंधों को डिनॉर्मलाइज़्ड व्यू में दिखाने के लिए उपयोगी है, जैसे: एक छात्र के सभी विषय, एक ग्राहक के सभी ऑर्डर, एक प्रोडक्ट के सभी टैग्स आदि।

  1. - MySQL में GROUP BY और MIN() से डुप्लिकेट कॉलम मान वाले समूह का न्यूनतम मान प्राप्त करें

    किसी कॉलम (जैसे Class) के डुप्लिकेट मान वाले समूहों में से दूसरे कॉलम (जैसे Amount) का न्यूनतम मान प्राप्त करने के लिए GROUP BY और MIN() एग्रीगेट फ़ंक्शन का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1875 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Class VARCHAR(20), Amoun

  1. - MySQL में GROUP BY DATE से विशिष्ट तारीख वाली पंक्तियां दिखाएं

    DATE() फ़ंक्शन से तारीख भाग के अनुसार समूहित करें डेटाइम कॉलम के केवल तारीख भाग के अनुसार पंक्तियों को समूहित करने के लिए GROUP BY DATE(कॉलम) का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable1996 ( ShippingDate datetime, CustomerName varchar(20) ); Query OK, 0 rows affected (

  1. - MySQL में डुप्लिकेट आईडी के लिए फ्लोटिंग कॉलम का न्यूनतम मान प्राप्त करें

    GROUP BY और MIN() से डुप्लिकेट आईडी समूह की न्यूनतम कीमत पाएं डुप्लिकेट आईडी वाले समूहों में फ्लोटिंग-पॉइंट कॉलम का न्यूनतम मान प्राप्त करने के लिए MIN() के साथ GROUP BY का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable2005 ( Id int, Price float ); Query OK, 0 rows affected (