MySQL menyertakan fungsi agregat yang disebut JSON_OBJECTAGG()
. Fungsi ini memungkinkan Anda membuat objek JSON yang berisi pasangan nilai kunci. Lebih khusus lagi, ini memungkinkan Anda membuat objek JSON ini berdasarkan hasil kueri.
Ia menerima dua argumen, yang pertama digunakan sebagai kunci dan yang kedua sebagai nilai. Argumen ini dapat berupa nama kolom atau ekspresi.
Sintaks
Sintaksnya seperti ini:
JSON_OBJECTAGG(key, value)
Dimana key
adalah kolom atau ekspresi yang mewakili kunci dari pasangan kunci/nilai, dan value
adalah kolom atau ekspresi yang mewakili nilai dari pasangan kunci/nilai.
Contoh
Berikut ini contoh untuk didemonstrasikan.
Berikut adalah kueri umum yang mungkin kami jalankan tanpa JSON_OBJECTAGG()
fungsi:
SELECT District AS 'State', Name AS 'City', Population FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Hasil:
+-----------------+---------------+------------+ | State | City | Population | +-----------------+---------------+------------+ | Capital Region | Canberra | 322723 | | New South Wales | Sydney | 3276207 | | New South Wales | Newcastle | 270324 | | New South Wales | Central Coast | 227657 | | New South Wales | Wollongong | 219761 | | Queensland | Brisbane | 1291117 | | Queensland | Gold Coast | 311932 | | Queensland | Townsville | 109914 | | Queensland | Cairns | 92273 | | South Australia | Adelaide | 978100 | | Tasmania | Hobart | 126118 | | Victoria | Melbourne | 2865329 | | Victoria | Geelong | 125382 | | West Australia | Perth | 1096829 | +-----------------+---------------+------------+
Kita dapat menyesuaikan query tersebut, sehingga Name
kolom (dalam contoh ini kami telah memberikan kolom ini sebuah alias dari City
) menjadi kunci, dan Population
kolom menjadi nilai.
Kami juga menggunakan GROUP BY
klausa untuk mengelompokkan hasil menurut District
kolom (dalam hal ini, kami telah membuat alias untuk kolom ini yang disebut State
).
SELECT District AS 'State', JSON_OBJECTAGG(Name, Population) AS 'City/Population' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Hasil:
+-----------------+-----------------------------------------------------------------------------------------+ | State | City/Population | +-----------------+-----------------------------------------------------------------------------------------+ | Capital Region | {"Canberra": 322723} | | New South Wales | {"Sydney": 3276207, "Newcastle": 270324, "Wollongong": 219761, "Central Coast": 227657} | | Queensland | {"Cairns": 92273, "Brisbane": 1291117, "Gold Coast": 311932, "Townsville": 109914} | | South Australia | {"Adelaide": 978100} | | Tasmania | {"Hobart": 126118} | | Victoria | {"Geelong": 125382, "Melbourne": 2865329} | | West Australia | {"Perth": 1096829} | +-----------------+-----------------------------------------------------------------------------------------+
Dalam hal ini kami mengelompokkan kota berdasarkan negara bagian/kabupatennya. Namun, jika kita hanya menginginkan satu objek JSON besar yang berisi semua kota/populasi untuk negara itu, kita dapat menghapus negara bagian/distrik (dan GROUP BY
yang terkait dengannya. klausa) dari kueri sama sekali.
SELECT JSON_OBJECTAGG(Name, Population) AS 'City/Population' FROM City WHERE CountryCode = 'AUS';
Hasil:
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | City/Population | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | {"Perth": 1096829, "Cairns": 92273, "Hobart": 126118, "Sydney": 3276207, "Geelong": 125382, "Adelaide": 978100, "Brisbane": 1291117, "Canberra": 322723, "Melbourne": 2865329, "Newcastle": 270324, "Gold Coast": 311932, "Townsville": 109914, "Wollongong": 219761, "Central Coast": 227657} | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Lihat juga JSON_ARRAYAGG()
fungsi yang memungkinkan Anda menggabungkan hasil kueri ke dalam larik JSON.