Bland de många MySQL-aggregatfunktionerna finns en som heter JSON_ARRAYAGG()
. Med den här funktionen kan du aggregera en resultatuppsättning som en enda JSON-array. Varje rad i resultatuppsättningen slutar som ett enda element i arrayen.
Ordningen på elementen i arrayen är odefinierad.
Syntax
Syntaxen ser ut så här:
JSON_ARRAYAGG(col_or_expr)
Där col_or_expr
är en kolumn eller ett uttryck som utvärderas till ett enda värde.
Exempel
Här är ett exempel att visa.
Här är en vanlig fråga som vi kan köra utan JSON_ARRAYAGG()
funktion:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Resultat:
+-----------------+---------------+ | 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 | +-----------------+---------------+
Vi kan justera den frågan så att varje stad blir ett element i en array. För att göra detta skickar vi helt enkelt Name
kolumnen (namnet på staden) till JSON_ARRAYAGG()
funktion.
Vi använder också en GROUP BY
sats för att gruppera resultaten efter District
kolumn (i det här fallet har vi skapat ett alias för denna kolumn som heter State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Resultat:
+-----------------+--------------------------------------------------------+ | 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"] | +-----------------+--------------------------------------------------------+
Se även JSON_OBJECTAGG()
funktion som låter dig skapa ett JSON-objekt från en fråga.