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

MySQL में GROUP_CONCAT और SUM का उपयोग करके कई पंक्तियों के स्ट्रिंग्स को संयोजित करें और ID का योग दिखाएं

MySQL में GROUP_CONCAT और SUM के साथ पंक्तियों को एक पंक्ति में संयोजित करना

MySQL का GROUP_CONCAT() फ़ंक्शन एक समूह के भीतर गैर-NULL मानों को एक स्ट्रिंग में जोड़ता है, और SUM() संख्यात्मक मानों को जोड़ता है। साथ में वे कई पंक्तियों को एक सारांश पंक्ति में संक्षिप्त करने की अनुमति देते हैं।

टेबल बनाना

mysql> CREATE TABLE DemoTable1960 (
    -> StudentId INT,
    -> StudentName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.00 sec)

डेटा डालना

mysql> INSERT INTO DemoTable1960 VALUES (100, 'Chris');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1960 VALUES (101, 'Bob');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1960 VALUES (102, 'David');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1960 VALUES (103, 'Mike');
Query OK, 1 row affected (0.00 sec)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable1960;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       100 | Chris       |
|       101 | Bob         |
|       102 | David       |
|       103 | Mike        |
+-----------+-------------+
4 rows in set (0.00 sec)

नामों को संयोजित करने और ID का योग करने का क्वेरी

mysql> SELECT 
    -> SUM(StudentId) AS TotalIdSum,
    -> GROUP_CONCAT(StudentName SEPARATOR '.') AS ListOfStudents
    -> FROM DemoTable1960;

परिणाम

+----------------+----------------------+
| TotalIdSum     | ListOfStudents       |
+----------------+----------------------+
|            406 | Chris.Bob.David.Mike |
+----------------+----------------------+
1 row in set (0.00 sec)

GROUP_CONCAT सिंटैक्स और विकल्प

GROUP_CONCAT(
    [DISTINCT] expr 
    [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]]
    [SEPARATOR str_val]
)

महत्वपूर्ण विकल्प

विकल्पविवरणडिफ़ॉल्ट
DISTINCTडुप्लिकेट मान हटाता हैनहीं
ORDER BYसंयोजन क्रम निर्दिष्ट करता हैसमूह क्रम
SEPARATORविभाजक स्ट्रिंग',' (कॉमा)

GROUP_CONCAT उदाहरण

-- डिफ़ॉल्ट कॉमा विभाजक
GROUP_CONCAT(StudentName)  -- 'Chris,Bob,David,Mike'

-- कस्टम विभाजक
GROUP_CONCAT(StudentName SEPARATOR ' | ')  -- 'Chris | Bob | David | Mike'

-- क्रमबद्ध संयोजन
GROUP_CONCAT(StudentName ORDER BY StudentName SEPARATOR ', ')  -- 'Bob, Chris, David, Mike'

-- अद्वितीय मान
GROUP_CONCAT(DISTINCT StudentName SEPARATOR ', ')

-- लंबाई सीमा (डिफ़ॉल्ट 1024 बाइट्स)
SET SESSION group_concat_max_len = 10000;

GROUP BY के साथ उपयोग

-- विभाग के अनुसार समूहित
SELECT 
    Department,
    COUNT(*) AS EmpCount,
    SUM(Salary) AS TotalSalary,
    GROUP_CONCAT(EmployeeName ORDER BY EmployeeName SEPARATOR ', ') AS Employees
FROM Employees
GROUP BY Department;

संयोजन के साथ सशर्त तर्क

SELECT 
    GROUP_CONCAT(
        CASE WHEN Score >= 80 THEN CONCAT(Name, '(A)') 
             ELSE CONCAT(Name, '(B)') END
        ORDER BY Score DESC SEPARATOR '; '
    ) AS GradedStudents
FROM Students;

सीमाएं और समाधान

  • अधिकतम लंबाई: group_concat_max_len सत्र/सिस्टम चर द्वारा नियंत्रित (डिफ़ॉल्ट 1024)
  • NULL मान: स्वचालित रूप से छोड़ दिए जाते हैं
  • बड़े परिणाम: बहुत बड़े संयोजन के लिए एप्लिकेशन-स्तरीय प्रसंस्करण पर विचार करें

विंडो फ़ंक्शन विकल्प (MySQL 8.0+)

SELECT DISTINCT
    SUM(StudentId) OVER () AS TotalIdSum,
    GROUP_CONCAT(StudentName ORDER BY StudentId SEPARATOR '.') OVER () AS ListOfStudents
FROM DemoTable1960
LIMIT 1;

व्यावहारिक उपयोग मामले

  1. रिपोर्टिंग: संबंधित आइटम्स की कॉमा-अलग सूची उत्पन्न करना
  2. ईमेल सूचियाँ: प्राप्तकर्ताओं को एक स्ट्रिंग में संयोजित करना
  3. टैग क्लाउड: लेख टैग्स को संयोजित करना
  4. ऑडिट ट्रेल: परिवर्तनों का सारांश बनाना
  5. डेटा निर्यात: CSV/JSON-जैसा आउटपुट उत्पन्न करना
  1. - MySQL में SUM() के साथ सशर्त गणना करके एक पंक्ति में एकाधिक कॉलम में परिणाम प्रदर्शित करना

    MySQL में पिवट-शैली सशर्त गणना एक ही क्वेरी में विभिन्न श्रेणियों के लिए एकाधिक गणना प्राप्त करने और उन्हें एक पंक्ति में अलग-अलग कॉलम के रूप में प्रदर्शित करने के लिए, SUM() के साथ बूलियन अभिव्यक्तियों का उपयोग करें। उदाहरण: पसंदीदा रंग गिनती SELECT * FROM DemoTable1452; +----------------+ | Favo

  1. - MySQL में पंक्तियों के मान जोड़कर परिणाम सॉर्ट करना

    GROUP BY और ORDER BY से समूहवार योग और क्रम SUM() और GROUP BY से प्रत्येक समूह का योग निकालें, फिर ORDER BY से परिणाम क्रमबद्ध करें। तालिका और डेटा (Chris, 45), (David, 98), (Bob, 58); क्वेरी: नामवार कुल अंक, अवरोही क्रम ORDER BY TotalSum DESC; परिणाम +-------------+----------+ | StudentName

  1. - MySQL में DATE_FORMAT का उपयोग करके तिथि से महीना कॉलम बनाएं और डुप्लिकेट तिथियों का योग प्रदर्शित करें

    तिथि से महीना निकालना और डुप्लिकेट तिथियों का योग करना MySQL में DATE_FORMAT() फ़ंक्शन का उपयोग करके आप तिथि से महीना (या कोई भी प्रारूप) निकाल सकते हैं, और फिर GROUP BY के साथ डुप्लिकेट तिथियों/महीनों के लिए योग गणना कर सकते हैं। टेबल बनाना ); Query OK, 0 rows affected (0.52 sec) डेटा डालना (डुप