JSON_OBJECTAGG() से की-वैल्यू ऑब्जेक्ट बनाना
MySQL 5.7+ में JSON_OBJECTAGG() फंक्शन का उपयोग करके कॉलम वैल्यूज को JSON ऑब्जेक्ट (की-वैल्यू पेयर) में एग्रीगेट कर सकते हैं।
टेबल बनाना और डेटा इन्सर्ट करना
CREATE TABLE DemoTable (
Id INT,
FirstName VARCHAR(100),
Age INT
);
INSERT INTO DemoTable VALUES(10, 'John', 23);
INSERT INTO DemoTable VALUES(20, 'Carol', 21);
INSERT INTO DemoTable VALUES(10, 'Sam', 24);
INSERT INTO DemoTable VALUES(20, 'Chris', 20);
मौजूदा डेटा
+------+-----------+------+ | Id | FirstName | Age | +------+-----------+------+ | 10 | John | 23 | | 20 | Carol | 21 | | 10 | Sam | 24 | | 20 | Chris | 20 | +------+-----------+------+
क्वेरी: Id के आधार पर ग्रुप करके JSON ऑब्जेक्ट बनाना
SELECT Id, JSON_OBJECTAGG(FirstName, Age) FROM DemoTable GROUP BY Id;
आउटपुट
+------+-------------------------------+
| Id | JSON_OBJECTAGG(FirstName,Age) |
+------+-------------------------------+
| 10 | {"Sam": 24, "John": 23} |
| 20 | {"Carol": 21, "Chris": 20} |
+------+-------------------------------+
कैसे काम करता है
FirstNameJSON ऑब्जेक्ट की "की" बनती हैAgeसंबंधित "वैल्यू" बनती हैGROUP BY Idप्रत्येक Id के लिए अलग JSON ऑब्जेक्ट बनाता है- डुप्लीकेट की होने पर आखिरी मान रखा जाता है
संबंधित JSON फंक्शन्स
-- सिंपल JSON ऑब्जेक्ट बनाना
SELECT JSON_OBJECT('name', 'John', 'age', 25);
-- {"name": "John", "age": 25}
-- JSON ऐरे बनाना
SELECT JSON_ARRAYAGG(FirstName) FROM DemoTable GROUP BY Id;
-- ["John", "Sam"] या ["Carol", "Chris"]
-- JSON से वैल्यू निकालना
SELECT JSON_EXTRACT(json_col, '$.John') FROM table_name;
उपयोग के मामले
- API रिस्पॉन्स के लिए डेटा फॉर्मेट करना
- डायनामिक एट्रिब्यूट्स स्टोर करना
- नोएसक्यूएल-स्टाइल डेटा रिलेशनल टेबल में रखना
- रिपोर्टिंग के लिए पिवट टेबल जैसा आउटपुट
ध्यान दें
MySQL 5.7.22+ में उपलब्ध। पुराने वर्जन में CONCAT और GROUP_CONCAT से मैन्युअल JSON बनाना पड़ता था।