GROUP_CONCAT() फंक्शन का उपयोग
MySQL में GROUP_CONCAT() फंक्शन ग्रुप की सभी पंक्तियों के मानों को एक स्ट्रिंग में जोड़ देता है, जिससे एक ग्रुप की सभी जानकारी एक ही पंक्ति में दिखाई देती है।
सिंटैक्स
SELECT groupColumn, GROUP_CONCAT(concatColumn [SEPARATOR ',']) FROM yourTableName GROUP BY groupColumn;
उदाहरण
1. टेबल बनाना
mysql> CREATE TABLE DemoTable (
ProductId INT,
ProductName VARCHAR(40),
ProductCategory VARCHAR(40)
);
Query OK, 0 rows affected (0.67 sec)
2. डेटा डालना
mysql> INSERT INTO DemoTable VALUES(100, 'Product-1', '1Product'); mysql> INSERT INTO DemoTable VALUES(101, 'Product-2', '2Product'); mysql> INSERT INTO DemoTable VALUES(100, 'Product-1', '3Product');
3. सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+-----------+-------------+-----------------+ | ProductId | ProductName | ProductCategory | +-----------+-------------+-----------------+ | 100 | Product-1 | 1Product | | 101 | Product-2 | 2Product | | 100 | Product-1 | 3Product | +-----------+-------------+-----------------+ 3 rows in set (0.00 sec)
4. ग्रुप द्वारा कनेक्ट करना
mysql> SELECT ProductId, GROUP_CONCAT(ProductCategory) AS `GROUP`
FROM DemoTable GROUP BY ProductId;
+-----------+-------------------+ | ProductId | GROUP | +-----------+-------------------+ | 100 | 1Product,3Product | | 101 | 2Product | +-----------+-------------------+ 2 rows in set (0.00 sec)
उन्नत विकल्प
कस्टम सेपरेटर
SELECT ProductId, GROUP_CONCAT(ProductCategory SEPARATOR ' | ') AS Categories FROM DemoTable GROUP BY ProductId;
+-----------+----------------------+ | ProductId | Categories | +-----------+----------------------+ | 100 | 1Product | 3Product | | 101 | 2Product | +-----------+----------------------+
क्रमबद्ध करके कनेक्ट करना
SELECT ProductId, GROUP_CONCAT(ProductCategory ORDER BY ProductCategory DESC) AS Categories FROM DemoTable GROUP BY ProductId;
डुप्लिकेट हटाकर (DISTINCT)
SELECT ProductId, GROUP_CONCAT(DISTINCT ProductCategory) AS Categories FROM DemoTable GROUP BY ProductId;
लंबाई सीमा बढ़ाना (डिफ़ॉल्ट 1024 बाइट)
SET SESSION group_concat_max_len = 10000; SELECT ProductId, GROUP_CONCAT(ProductCategory) FROM DemoTable GROUP BY ProductId;
उपयोग के मामले
- ई-कॉमर्स: एक ऑर्डर के सभी उत्पाद एक पंक्ति में
- रिपोर्टिंग: छात्र के सभी विषय एक पंक्ति में
- टैग सिस्टम: पोस्ट के सभी टैग कॉमा-सेपरेटेड
- श्रेणीबद्ध डेटा निर्यात
सीमाएं
- डिफ़ॉल्ट अधिकतम लंबाई 1024 बाइट (group_concat_max_len सिस्टम वेरिएबल)
- NULL मान स्वचालित रूप से अनदेखे किए जाते हैं
- बहुत बड़े परिणाम मेमोरी समस्या पैदा कर सकते हैं
- ORDER BY के बिना क्रम अनिश्चित होता है