मारियाडीबी में, JSON_ARRAYAGG()
एक अंतर्निहित फ़ंक्शन है जो JSON या SQL मानों के दिए गए सेट में प्रत्येक मान के लिए एक तत्व युक्त JSON सरणी देता है।
फ़ंक्शन एक स्तंभ या एक अभिव्यक्ति पर कार्य करता है जो एकल मान का मूल्यांकन करता है। यह आपको एक एकल JSON सरणी के रूप में सेट किए गए परिणाम को एकत्रित करने में सक्षम बनाता है। परिणाम सेट की प्रत्येक पंक्ति सरणी में एकल तत्व के रूप में समाप्त होती है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
JSON_ARRAYAGG([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}])
उदाहरण
मान लीजिए कि हम एक टेबल को क्वेरी करते हैं:
SELECT PetName
FROM Pets;
और निम्न परिणाम सेट प्राप्त करें:
+---------+ | PetName | +---------+ | Fluffy | | Fetch | | Scratch | | Wag | | Tweet | | Fluffy | | Bark | | Meow | +---------+
परिणाम एक कॉलम है, और प्रत्येक पंक्ति में एक अलग पालतू नाम होता है।
मान लें कि हम चाहते हैं कि सभी पालतू जानवर एक JSON सरणी में सूचीबद्ध हों (ताकि प्रत्येक पालतू नाम का अपना सरणी तत्व हो)।
हम JSON_ARRAYAGG()
. का उपयोग कर सकते हैं ऐसा करने के लिए कार्य करें:
SELECT JSON_ARRAYAGG(PetName)
FROM Pets;
परिणाम:
+-------------------------------------------------------------------+ | JSON_ARRAYAGG(PetName) | +-------------------------------------------------------------------+ | ["Fluffy","Fetch","Scratch","Wag","Tweet","Fluffy","Bark","Meow"] | +-------------------------------------------------------------------+
हमने केवल JSON_ARRAYAGG()
. को कॉलम का नाम दिया था समारोह।
विशिष्ट परिणाम
हम DISTINCT
जोड़ सकते हैं सरणी से डुप्लिकेट मानों को हटाने के लिए क्लॉज:
SELECT JSON_ARRAYAGG(DISTINCT PetName)
FROM Pets;
परिणाम:
+----------------------------------------------------------+ | JSON_ARRAYAGG(DISTINCT PetName) | +----------------------------------------------------------+ | ["Bark","Fetch","Fluffy","Meow","Scratch","Tweet","Wag"] | +----------------------------------------------------------+
ध्यान दें कि Fluffy
यहाँ केवल एक बार शामिल किया गया था, जबकि Fluffy
पिछले उदाहरण में दो बार शामिल किया गया था (क्योंकि Fluffy
. नामक दो पालतू जानवर हैं )।
परिणाम ऑर्डर करें
हम ORDER BY
. का उपयोग कर सकते हैं सरणी तत्वों के लिए एक आदेश निर्दिष्ट करने के लिए खंड:
SELECT JSON_ARRAYAGG(PetName ORDER BY PetName DESC)
FROM Pets;
परिणाम:
+-------------------------------------------------------------------+ | JSON_ARRAYAGG(PetName ORDER BY PetName DESC) | +-------------------------------------------------------------------+ | ["Wag","Tweet","Scratch","Meow","Fluffy","Fluffy","Fetch","Bark"] | +-------------------------------------------------------------------+
परिणाम सीमित करें
हम LIMIT
. का उपयोग कर सकते हैं सरणी तत्वों के लिए एक आदेश निर्दिष्ट करने के लिए खंड:
SELECT JSON_ARRAYAGG(PetName LIMIT 3)
FROM Pets;
परिणाम:
+--------------------------------+ | JSON_ARRAYAGG(PetName LIMIT 3) | +--------------------------------+ | ["Fluffy","Fetch","Scratch"] | +--------------------------------+
हम LIMIT
. के लिए ऑफ़सेट का भी उपयोग कर सकते हैं खंड:
SELECT JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2)
FROM Pets;
परिणाम:
+-----------------------------------------+ | JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2) | +-----------------------------------------+ | ["Scratch","Wag","Tweet"] | +-----------------------------------------+
वैकल्पिक रूप से, हम LIMIT
. को छोड़ सकते हैं और OFFSET
कीवर्ड, और समान परिणाम प्राप्त करने के लिए संख्याओं को चारों ओर स्विच करें (और उन्हें अल्पविराम से अलग करें):
SELECT JSON_ARRAYAGG(PetName LIMIT 2, 3)
FROM Pets;
परिणाम:
+-----------------------------------+ | JSON_ARRAYAGG(PetName LIMIT 2, 3) | +-----------------------------------+ | ["Scratch","Wag","Tweet"] | +-----------------------------------+
समूहीकृत परिणाम
हम SQL का उपयोग कर सकते हैं GROUP BY
दूसरे कॉलम के समूह के आधार पर सरणियाँ बनाने के लिए क्लॉज।
मान लीजिए कि हम अपनी मूल क्वेरी में एक कॉलम जोड़ते हैं:
SELECT
PetTypeId,
PetName
FROM Pets;
परिणाम:
+-----------+---------+ | PetTypeId | PetName | +-----------+---------+ | 2 | Fluffy | | 3 | Fetch | | 2 | Scratch | | 3 | Wag | | 1 | Tweet | | 3 | Fluffy | | 3 | Bark | | 2 | Meow | +-----------+---------+
अब हमारे पास एक PetTypeId
है कॉलम और साथ ही PetName
कॉलम। यह प्रत्येक नाम से एक पालतू जानवर के प्रकार से मेल खाता है।
यहां GROUP BY
. का उपयोग करने का एक उदाहरण दिया गया है हमारे परिणामों को PetTypeId
. द्वारा समूहीकृत करने के लिए क्लॉज JSON_ARRAYAGG()
. का उपयोग करते समय कॉलम समारोह:
SELECT
PetTypeId,
JSON_ARRAYAGG(PetName)
FROM Pets
GROUP BY PetTypeId;
परिणाम:
+-----------+---------------------------------+ | PetTypeId | JSON_ARRAYAGG(PetName) | +-----------+---------------------------------+ | 1 | ["Tweet"] | | 2 | ["Fluffy","Scratch","Meow"] | | 3 | ["Fetch","Wag","Fluffy","Bark"] | +-----------+---------------------------------+
इसने हमें प्रत्येक पालतू प्रकार के लिए एक अलग सरणी बनाने की अनुमति दी।
निम्न क्वेरी INNER JOIN
का उपयोग करती है वास्तविक पालतू प्रकार को वापस करने के लिए किसी अन्य तालिका पर, न केवल आईडी।
SELECT
pt.PetType,
p.PetName
FROM Pets p
INNER JOIN PetTypes pt
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType;
परिणाम:
+---------+---------+ | PetType | PetName | +---------+---------+ | Bird | Tweet | | Cat | Scratch | | Cat | Fluffy | | Cat | Meow | | Dog | Wag | | Dog | Fetch | | Dog | Bark | | Dog | Fluffy | +---------+---------+
हम देख सकते हैं कि प्रत्येक पालतू प्रकार पहले कॉलम में सूचीबद्ध है और पालतू नाम दूसरे कॉलम में सूचीबद्ध है।
आइए अब JSON_ARRAYAGG()
का उपयोग करें समारोह:
SELECT
pt.PetType,
JSON_ARRAYAGG(p.PetName)
FROM Pets p
INNER JOIN PetTypes pt
ON pt.PetTypeId = p.PetTypeId
GROUP BY pt.PetType;
परिणाम:
+---------+--------------------------+ | PetType | JSON_ARRAYAGG(p.PetName) | +---------+--------------------------+ | Bird | Tweet | | Cat | Scratch,Fluffy,Meow | | Dog | Wag,Fetch,Bark,Fluffy | +---------+--------------------------+