परिचय
जब एक ही एंटिटी (जैसे छात्र) की एकाधिक पंक्तियां हों और आप उन्हें एक पंक्ति में समूहित करके संबंधित मानों को जोड़ना चाहते हैं, तो GROUP_CONCAT() फंक्शन सबसे कुशल तरीका है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1561 (
-> StudentName VARCHAR(20),
-> Title TEXT
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable1561 VALUES('Adam', 'Learning Java');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable1561 VALUES('Bob', 'Learning C');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable1561 VALUES('Adam', 'Learning Spring and Hibernate Framework');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable1561 VALUES('Carol', 'Learning MySQL from basic');
Query OK, 1 row affected (0.30 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1561;
आउटपुट:
+-------------+-----------------------------------------+
| StudentName | Title |
+-------------+-----------------------------------------+
| Adam | Learning Java |
| Bob | Learning C |
| Adam | Learning Spring and Hibernate Framework |
| Carol | Learning MySQL from basic |
+-------------+-----------------------------------------+
4 rows in set (0.00 sec)
फॉर्मेटेड आउटपुट के लिए क्वेरी
mysql> SELECT StudentName,
-> GROUP_CONCAT(Title SEPARATOR ',') AS FormattedOutput
-> FROM DemoTable1561
-> GROUP BY StudentName;
परिणाम
+-------------+-------------------------------------------------------+
| StudentName | FormattedOutput |
+-------------+-------------------------------------------------------+
| Adam | Learning Java,Learning Spring and Hibernate Framework |
| Bob | Learning C |
| Carol | Learning MySQL from basic |
+-------------+-------------------------------------------------------+
3 rows in set (0.00 sec)
व्याख्या
GROUP BY StudentName- छात्र के अनुसार समूहितGROUP_CONCAT(Title SEPARATOR ',')- प्रत्येक समूह के शीर्षकों को कॉमा से जोड़ता है- डिफ़ॉल्ट सेपरेटर कॉमा है,
SEPARATORवैकल्पिक
GROUP_CONCAT विकल्प
GROUP_CONCAT(DISTINCT Title)- डुप्लिकेट शीर्षक हटाता हैGROUP_CONCAT(Title ORDER BY Title)- क्रमबद्ध जोड़ता हैGROUP_CONCAT(Title SEPARATOR '; ')- कस्टम सेपरेटर
महत्वपूर्ण सीमा
group_concat_max_len सिस्टम वेरिएबल (डिफ़ॉल्ट 1024 बाइट्स) परिणाम लंबाई सीमित करता है। बढ़ाने के लिए:
SET SESSION group_concat_max_len = 1000000;
-- या my.cnf में स्थायी
[mysqld]
group_concat_max_len = 1000000
प्रदर्शन
- एप्लिकेशन-लेवल लूप + क्वेरी से बहुत तेज
- सिंगल क्वेरी, सिंगल राउंड-ट्रिप
- इंडेक्स (StudentName पर) GROUP BY को तेज करता है
GROUP_CONCAT MySQL-विशिष्ट एक्सटेंशन है (मानक SQL: STRING_AGG PostgreSQL/SQL Server में)।