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()
के साथ क्लॉज ।