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

MySQL Group_Concat () बनाम टी-एसक्यूएल String_Agg ()

SQL सर्वर 2017 में पेश किए गए T-SQL कार्यों में से एक STRING_AGG() है समारोह। यह मूल रूप से MySQL के GROUP_CONCAT() . के बराबर है फ़ंक्शन - यह आपको क्वेरी परिणामों को पंक्तियों के बजाय एक सीमित सूची के रूप में वापस करने देता है।

लेकिन दो कार्यों के बीच कुछ मामूली अंतर हैं।

यह लेख इन कार्यों के बीच कुछ मुख्य सिंटैक्स अंतरों की पड़ताल करता है।

सिंटैक्स

सबसे पहले, यहां प्रत्येक फ़ंक्शन के लिए आधिकारिक सिंटैक्स दिया गया है।

MySQL - GROUP_CONCAT()

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

टी-एसक्यूएल - STRING_AGG()

STRING_AGG ( expression, separator ) [ <order_clause> ]

<order_clause> ::=   
    WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

सिंटैक्स अंतर

यहां MySQL के GROUP_CONCAT() . के बीच तीन मुख्य सिंटैक्स अंतर दिए गए हैं और टी-एसक्यूएल का STRING_AGG() कार्य:

  • डिफ़ॉल्ट विभाजक :शायद सबसे स्पष्ट अंतर यह है कि STRING_AGG() आपको एक विभाजक निर्दिष्ट करने की आवश्यकता है। यदि आप दो तर्क प्रदान नहीं करते हैं (जिनमें से दूसरा विभाजक है) तो आपको एक त्रुटि मिलेगी। MySQL के GROUP_CONCAT() . के साथ दूसरी ओर कार्य, विभाजक एक वैकल्पिक तर्क है। यदि आप इसे प्रदान नहीं करते हैं, तो यह डिफ़ॉल्ट रूप से अल्पविराम का उपयोग करेगा।
  • परिणामों का आदेश देना :जबकि MySQL और T-SQL दोनों के कार्य आपको ORDER BY जोड़ने की अनुमति देते हैं खंड, वाक्य रचना थोड़ा अलग है। टी-एसक्यूएल के लिए आवश्यक है कि आप WITHIN GROUP का उपयोग करें परिणाम सेट का आदेश देते समय क्लॉज, जबकि MySQL के लिए यह आवश्यकता नहीं है।
  • विशिष्ट परिणाम :MySQL आपको DISTINCT . का उपयोग करने की अनुमति देता है केवल अद्वितीय मान वापस करने के लिए। T-SQL यह विकल्प प्रदान नहीं करता है।

इन अंतरों को प्रदर्शित करने के लिए नीचे उदाहरण दिए गए हैं।

डिफ़ॉल्ट विभाजक

MySQL - GROUP_CONCAT()

हमें MySQL में विभाजक निर्दिष्ट करने की आवश्यकता नहीं है। यह एक वैकल्पिक तर्क है। डिफ़ॉल्ट मान एक अल्पविराम है।

SELECT GROUP_CONCAT(Genre) AS Result
FROM Genres;

परिणाम:

+----------------------------------------------+
| Result                                       |
+----------------------------------------------+
| Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk |
+----------------------------------------------+

टी-एसक्यूएल - STRING_AGG()

T-SQL के लिए आवश्यक है कि हम विभाजक निर्दिष्ट करें।

SELECT STRING_AGG(Genre, ',') AS Result
FROM Genres;

परिणाम:

Result                                      
--------------------------------------------
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

यदि हम विभाजक निर्दिष्ट नहीं करते हैं तो हमें एक त्रुटि मिलती है:

SELECT STRING_AGG(Genre) AS Result
FROM Genres;

परिणाम:

Error: The STRING_AGG function requires 2 argument(s).

परिणामों का आदेश देना

MySQL - GROUP_CONCAT()

MySQL में सेट किए गए परिणाम को ऑर्डर करते समय, बस ORDER BY . जोड़ें एक तर्क के रूप में क्लॉज, उसके बाद कॉलम द्वारा इसे ऑर्डर करने के लिए, उसके बाद ASC या DESC इस पर निर्भर करता है कि आप इसे आरोही या अवरोही क्रम में चाहते हैं।

USE Music;
SELECT 
  ar.ArtistName AS 'Artist',
  GROUP_CONCAT(al.AlbumName ORDER BY al.AlbumName DESC) AS 'Album List'
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

परिणाम:

+------------------------+----------------------------------------------------------------------------+
| Artist                 | Album List                                                                 |
+------------------------+----------------------------------------------------------------------------+
| AC/DC                  | Powerage                                                                   |
| Allan Holdsworth       | The Sixteen Men of Tain,All Night Wrong                                    |
| Buddy Rich             | Big Swing Face                                                             |
| Devin Townsend         | Ziltoid the Omniscient,Epicloud,Casualties of Cool                         |
| Iron Maiden            | Somewhere in Time,Powerslave,Piece of Mind,No Prayer for the Dying,Killers |
| Jim Reeves             | Singing Down the Lane                                                      |
| Michael Learns to Rock | Scandinavia,Eternity,Blue Night                                            |
| The Script             | No Sound Without Silence                                                   |
| Tom Jones              | Praise and Blame,Long Lost Suitcase,Along Came Jones                       |
+------------------------+----------------------------------------------------------------------------+

टी-एसक्यूएल - STRING_AGG()

ORDER BY . के साथ संयोजित परिणामों का आदेश देते समय ,  SQL सर्वर के लिए आवश्यक है कि WITHIN GROUP क्लॉज का इस्तेमाल किया जाए।

USE Music;
SELECT 
  ar.ArtistName AS 'Artist',
  STRING_AGG(al.AlbumName, ', ') WITHIN GROUP (ORDER BY al.AlbumName DESC) AS 'Album List'
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

परिणाम:

Artist                     Album List                                                                    
-------------------------  ------------------------------------------------------------------------------
AC/DC                      Powerage                                                                      
Allan Holdsworth           The Sixteen Men of Tain, All Night Wrong                                      
Buddy Rich                 Big Swing Face                                                                
Devin Townsend             Ziltoid the Omniscient, Epicloud, Casualties of Cool                          
Iron Maiden                Somewhere in Time, Powerslave, Piece of Mind, No Prayer for the Dying, Killers
Jim Reeves                 Singing Down the Lane                                                         
Michael Learns to Rock     Scandinavia, Eternity, Blue Night                                             
The Script                 No Sound Without Silence                                                      
Tom Jones                  Praise and Blame, Long Lost Suitcase, Along Came Jones                        

विशिष्ट परिणाम

MySQL - GROUP_CONCAT()

MySQL का GROUP_CONCAT() DISTINCT . का समर्थन करता है क्लॉज, जो आपको परिणाम सेट से डुप्लिकेट मानों को समाप्त करने की अनुमति देता है।

USE Solutions;
SELECT GROUP_CONCAT(DISTINCT TaskName) 
FROM Tasks;

परिणाम:

+--------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName)                        |
+--------------------------------------------------------+
| Do garden,Feed cats,Paint roof,Relax,Take dog for walk |
+--------------------------------------------------------+

टी-एसक्यूएल - STRING_AGG()

T-SQL का STRING_AGG() फ़ंक्शन DISTINCT का समर्थन नहीं करता है खंड।

USE Solutions;
SELECT STRING_AGG(DISTINCT TaskName, ',') 
FROM Tasks;

परिणाम:

Error: Incorrect syntax near ','.

जैसा कि अपेक्षित था, एक त्रुटि उत्पन्न होती है यदि हम DISTINCT . का उपयोग करने का प्रयास करते हैं STRING_AGG() के साथ क्लॉज ।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में प्रारंभिक मान और ऑटो वेतन वृद्धि कैसे सेट करें?

  2. मैं mysql देशी json फ़ंक्शन का उपयोग करके नेस्टेड json ऑब्जेक्ट कैसे उत्पन्न करूं?

  3. MySQL में टाइम ज़ोन कैसे बदलें

  4. MySQL में एक स्ट्रिंग के हिस्से को कैसे बदलें

  5. PHP और mySQL:वर्ष 2038 बग:यह क्या है? इसे कैसे हल करें?