sql >> Databáze >  >> RDS >> Mysql

JSON_ARRAYAGG() – Vytvořte pole JSON z řádků dotazu v MySQL

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.


  1. Odemknutí výhod programu certifikovaných partnerů MariaDB

  2. Prevence útoků SQL Injection pomocí Pythonu

  3. SQL Server (TSQL) - Je možné provádět příkazy paralelně?

  4. Vrácení sady výsledků