Mezi mnoha agregačními funkcemi MySQL je jedna s názvem JSON_ARRAYAGG()
. Tato funkce umožňuje agregovat sadu výsledků jako jediné pole JSON. Každý řádek sady výsledků skončí jako jeden prvek v poli.
Pořadí prvků v poli není definováno.
Syntaxe
Syntaxe vypadá takto:
JSON_ARRAYAGG(col_or_expr)
Kde col_or_expr
je sloupec nebo výraz, který se vyhodnotí jako jediná hodnota.
Příklad
Zde je příklad k demonstraci.
Zde je běžný dotaz, který bychom mohli spustit bez JSON_ARRAYAGG()
funkce:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Výsledek:
+-----------------+---------------+ | State | City | +-----------------+---------------+ | Capital Region | Canberra | | New South Wales | Sydney | | New South Wales | Newcastle | | New South Wales | Central Coast | | New South Wales | Wollongong | | Queensland | Brisbane | | Queensland | Gold Coast | | Queensland | Townsville | | Queensland | Cairns | | South Australia | Adelaide | | Tasmania | Hobart | | Victoria | Melbourne | | Victoria | Geelong | | West Australia | Perth | +-----------------+---------------+
Tento dotaz můžeme upravit tak, aby se každé město stalo prvkem v poli. K tomu jednoduše předáme Name
(název města) do JSON_ARRAYAGG()
funkce.
Používáme také GROUP BY
klauzule k seskupení výsledků podle District
sloupec (v tomto případě jsme pro tento sloupec vytvořili alias s názvem State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Výsledek:
+-----------------+--------------------------------------------------------+ | State | Cities | +-----------------+--------------------------------------------------------+ | Capital Region | ["Canberra"] | | New South Wales | ["Sydney", "Newcastle", "Central Coast", "Wollongong"] | | Queensland | ["Brisbane", "Gold Coast", "Townsville", "Cairns"] | | South Australia | ["Adelaide"] | | Tasmania | ["Hobart"] | | Victoria | ["Melbourne", "Geelong"] | | West Australia | ["Perth"] | +-----------------+--------------------------------------------------------+
Viz také JSON_OBJECTAGG()
funkce, která vám umožní vytvořit objekt JSON z dotazu.