Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

GROUP_CONCAT () MySQL में फंक्शन

MySQL में एक GROUP_CONCAT() है फ़ंक्शन जो हमें एक क्वेरी से एक सीमांकित सूची के रूप में कॉलम वापस करने में सक्षम बनाता है।

यह संयोजित गैर-NULL . के साथ एक स्ट्रिंग परिणाम देता है एक समूह से मूल्य।

सिंटैक्स

वाक्य रचना इस प्रकार है:

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

उदाहरण

मान लीजिए कि हम निम्नलिखित क्वेरी चलाते हैं:

SELECT PetName 
FROM Pets;

और हमें निम्नलिखित परिणाम मिलते हैं:

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set (0.00 sec)

हम उपयोग कर सकते हैं GROUP_CONCAT() उन सभी पंक्तियों को एक सीमित सूची के रूप में वापस करने के लिए।

ऐसा करने के लिए, हमें PetName . पास करना होगा GROUP_CONCAT() . के तर्क के रूप में कॉलम समारोह:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

परिणाम:

+-------------------------------------------------+
| GROUP_CONCAT(PetName)                           |
+-------------------------------------------------+
| Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow |
+-------------------------------------------------+
1 row in set (0.01 sec)

आदेश देना

हम ORDER BY . का उपयोग कर सकते हैं इस फ़ंक्शन के आउटपुट को ऑर्डर करने के लिए क्लॉज:

SELECT GROUP_CONCAT(PetName ORDER BY PetName ASC)
FROM Pets;

परिणाम:

Bark,Fetch,Fluffy,Fluffy,Meow,Scratch,Tweet,Wag

ध्यान दें कि यह केवल GROUP_CONCAT() . के आउटपुट को सॉर्ट करता है फ़ंक्शन - यह SELECT . पर लागू किसी भी आदेश से पूरी तरह से स्वतंत्र है बयान ही।

DISTINCT खंड

हम DISTINCT . का उपयोग कर सकते हैं अद्वितीय मान वापस करने के लिए खंड। दूसरे शब्दों में, यदि डुप्लिकेट मान हैं, तो केवल एक घटना वापस आती है:

SELECT GROUP_CONCAT(DISTINCT PetName ORDER BY PetName ASC)
FROM Pets;

परिणाम:

Bark,Fetch,Fluffy,Meow,Scratch,Tweet,Wag

इस मामले में, Fluffy केवल एक बार प्रकट होता है। जब हम इसे DISTINCT . के बिना चलाते हैं खंड, Fluffy दो बार प्रकट होता है।

विभाजक को बदलना

डिफ़ॉल्ट रूप से, सूची अल्पविराम का उपयोग सीमांकक के रूप में करती है। लेकिन अगर हम चाहें तो इसे बदल सकते हैं:

SELECT GROUP_CONCAT(PetName SEPARATOR '-')
FROM Pets;

परिणाम:

Fluffy-Fetch-Scratch-Wag-Tweet-Fluffy-Bark-Meow

हम सभी विभाजकों को हटाने के लिए एक खाली स्ट्रिंग का भी उपयोग कर सकते हैं (ताकि मानों को जोड़ा जा सके):

SELECT GROUP_CONCAT(PetName SEPARATOR '')
FROM Pets;

और हमें निम्नलिखित परिणाम मिलते हैं:

FluffyFetchScratchWagTweetFluffyBarkMeow

समूहीकृत क्वेरी परिणाम

हम GROUP_CONCAT() . शामिल कर सकते हैं GROUP BY . के साथ एक क्वेरी में इस तरह का परिणाम प्राप्त करने के लिए क्लॉज:

SELECT 
    PetTypeId,
    GROUP_CONCAT(PetName ORDER BY PetName ASC)
FROM Pets
GROUP BY PetTypeId
ORDER BY PetTypeId;

परिणाम:

+-----------+--------------------------------------------+
| PetTypeId | GROUP_CONCAT(PetName ORDER BY PetName ASC) |
+-----------+--------------------------------------------+
|         1 | Tweet                                      |
|         2 | Fluffy,Meow,Scratch                        |
|         3 | Bark,Fetch,Fluffy,Wag                      |
+-----------+--------------------------------------------+

मेरे डेटाबेस में, वास्तविक पालतू प्रकार के नाम PetTypes . नामक एक अन्य तालिका में हैं . इसलिए हम एक INNER JOIN चला सकते हैं PetTypes पर वास्तविक पालतू प्रकार के नाम प्राप्त करने के लिए तालिका:

SELECT 
    pt.PetType,
    GROUP_CONCAT(p.PetName ORDER BY p.PetName ASC)
FROM Pets p
INNER JOIN PetTypes pt ON
p.PetTypeId = pt.PetTypeId
GROUP BY pt.PetType
ORDER BY pt.PetType ASC;

परिणाम:

+---------+------------------------------------------------+
| PetType | GROUP_CONCAT(p.PetName ORDER BY p.PetName ASC) |
+---------+------------------------------------------------+
| Bird    | Tweet                                          |
| Cat     | Fluffy,Meow,Scratch                            |
| Dog     | Bark,Fetch,Fluffy,Wag                          |
+---------+------------------------------------------------+

लंबाई की सीमाएं

GROUP_CONCAT() के आउटपुट को group_concat_max_len द्वारा दी गई अधिकतम लंबाई तक छोटा कर दिया गया है सिस्टम वैरिएबल, जिसका डिफ़ॉल्ट मान 1024 . है . मान अधिक सेट किया जा सकता है, हालांकि वापसी मान की प्रभावी अधिकतम लंबाई max_allowed_packet के मान से सीमित है ।

आप इस तरह वर्तमान मूल्य की जांच कर सकते हैं:

SHOW VARIABLES LIKE '%group_concat%';

इस मान को बदलने का सिंटैक्स इस प्रकार है:

SET [GLOBAL | SESSION] group_concat_max_len = val;

जहां val एक अहस्ताक्षरित पूर्णांक है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस में mysqldb के माध्यम से पांडा डेटाफ़्रेम कैसे सम्मिलित करें?

  2. MySQL त्रुटि:'उपयोगकर्ता' रूट '@' लोकलहोस्ट 'के लिए प्रवेश निषेध

  3. MySQL में एकाधिक कॉलम कैसे खोजें?

  4. स्थानीय होस्ट से डोकर MySQL कंटेनर से कनेक्ट करें?

  5. मैसकल 2 टेबल में डालें