sql >> Database teknologi >  >> RDS >> Mysql

JSON_OBJECTAGG() – Opret et JSON-objekt fra forespørgselsresultater i MySQL

MySQL inkluderer en samlet funktion kaldet JSON_OBJECTAGG() . Denne funktion giver dig mulighed for at oprette et JSON-objekt, der indeholder nøgle-værdi-par. Mere specifikt lader den dig oprette dette JSON-objekt baseret på resultaterne af en forespørgsel.

Den accepterer to argumenter, det første af disse bruges som en nøgle og det andet som en værdi. Disse argumenter kan være kolonnenavne eller udtryk.

Syntaks

Syntaksen ser sådan ud:

JSON_OBJECTAGG(key, value)

Hvor key er den kolonne eller det udtryk, der repræsenterer nøglen af nøgle/værdi-parret og value er den kolonne eller det udtryk, der repræsenterer værdien af nøgle/værdi-parret.

Eksempel

Her er et eksempel til at demonstrere.

Her er en almindelig forespørgsel, vi muligvis kører uden JSON_OBJECTAGG() funktion:

SELECT 
  District AS 'State',
  Name AS 'City',
  Population
FROM City
WHERE CountryCode = 'AUS'
ORDER BY State;

Resultat:

+-----------------+---------------+------------+
| 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 |
+-----------------+---------------+------------+

Vi kan justere den forespørgsel, så Name kolonne (i dette eksempel har vi givet denne kolonne et alias for City ) bliver en nøgle, og Population kolonne bliver en værdi.

Vi bruger også en GROUP BY klausul for at gruppere resultaterne efter District kolonne (i dette tilfælde har vi oprettet et alias for denne kolonne kaldet State ).

SELECT 
  District AS 'State',
  JSON_OBJECTAGG(Name, Population) AS 'City/Population'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY State;

Resultat:

+-----------------+-----------------------------------------------------------------------------------------+
| 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}                                                                      |
+-----------------+-----------------------------------------------------------------------------------------+

I dette tilfælde grupperede vi byerne efter deres stat/distrikt. Men hvis vi bare vil have ét stort JSON-objekt, der indeholder alle byer/befolkninger for det pågældende land, kan vi fjerne staten/distriktet (og dets tilknyttede GROUP BY klausul) fra forespørgslen helt.

SELECT
  JSON_OBJECTAGG(Name, Population) AS 'City/Population'
FROM City
WHERE CountryCode = 'AUS';

Resultat:

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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} |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Se også JSON_ARRAYAGG() funktion, som giver dig mulighed for at samle dine forespørgselsresultater i et JSON-array.


  1. Der er opstået en JNI-fejl. Tjek venligst din installation og prøv igen i Eclipse x86 Windows 8.1

  2. Tilpas Spotlight Cloud Alarmer

  3. Kaldes onUpgrade-metoden nogensinde?

  4. Ret "SQL-server blokerede adgang til ERKLÆRING 'OpenRowset/OpenDatasource' for komponenten 'Ad Hoc Distributed Queries'