sql >> Databasteknik >  >> RDS >> Mysql

JSON_ARRAYAGG() – Skapa en JSON-array från raderna i en fråga i MySQL

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.


  1. Ställ in en allmän standardprofil för databaspost (SSMS)

  2. Oracle Database Link - MySQL-ekvivalent?

  3. Hitta och ersätt hela mysql-databasen

  4. Det går inte att installera pg gem på Mountain Lion