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