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

MySQL से डेटा खींचने का सबसे कुशल तरीका ताकि यह डुप्लिकेट मानों के साथ फॉर्मेटेड हो

परिचय

जब एक ही एंटिटी (जैसे छात्र) की एकाधिक पंक्तियां हों और आप उन्हें एक पंक्ति में समूहित करके संबंधित मानों को जोड़ना चाहते हैं, तो 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 में)।

  1. - MySQL में एक टेबल से डेटा चुनना जहाँ कॉलम मान दूसरी टेबल से मेल खाएँ

    EXISTS सबक्वेरी से क्रॉस-टेबल मिलान EXISTS सबक्वेरी का उपयोग करके एक टेबल की पंक्तियाँ चुनें जहाँ कॉलम मान दूसरी टेबल के कॉलम मान से मेल खाता हो। पहली टेबल (विषय) (111, MySQL), (112, MongoDB), (113, Java), (114, C), (115, MySQL); दूसरी टेबल (छात्र) (Chris, MySQL), (Bob, MySQL), (Sam, MySQL), (C

  1. - MySQL में डुप्लिकेट मानों के आधार पर दूसरे कॉलम का योग कैसे करें?

    MySQL में GROUP BY और SUM() का उपयोग करके एक कॉलम में डुप्लिकेट मानों के आधार पर दूसरे कॉलम के मानों का योग निकाला जा सकता है। उदाहरण परिदृश्य नाम के अनुसार समूहित करके प्रत्येक व्यक्ति का कुल मान प्राप्त करना। तालिका और डेटा mysql> CREATE TABLE DemoTable (Name VARCHAR(20), Value INT); mysql>

  1. - MySQL में GROUP_CONCAT और CASE से अलग शर्तों वाले समान कॉलम के मान जोड़ें

    एक ही कॉलम (Name) की अलग-अलग शर्तों (Subject) के मानों को जोड़ने के लिए CASE के साथ सशर्त एग्रीगेशन और CONCAT या GROUP_CONCAT का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1869 ( Id INT, Subject VARCHAR(20), Name VARCHAR(20) ); डेटा डालें mysql> INSERT INTO DemoTable1869 VALUES(