sql >> Database >  >> RDS >> Mysql

JSON_OBJECTAGG() - Maak een JSON-object van queryresultaten in MySQL

MySQL bevat een verzamelfunctie met de naam JSON_OBJECTAGG() . Met deze functie kunt u een JSON-object maken dat sleutel-waardeparen bevat. Meer specifiek kun je dit JSON-object maken op basis van de resultaten van een query.

Het accepteert twee argumenten, waarvan de eerste wordt gebruikt als een sleutel en de tweede als een waarde. Deze argumenten kunnen kolomnamen of uitdrukkingen zijn.

Syntaxis

De syntaxis gaat als volgt:

JSON_OBJECTAGG(key, value)

Waar key is de kolom of uitdrukking die de sleutel vertegenwoordigt van het sleutel/waarde-paar en value is de kolom of uitdrukking die de waarde vertegenwoordigt van het sleutel/waarde-paar.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

Hier is een veelvoorkomende zoekopdracht die we zonder kunnen uitvoeren de JSON_OBJECTAGG() functie:

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

Resultaat:

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

We kunnen die zoekopdracht aanpassen, zodat de Name kolom (in dit voorbeeld hebben we deze kolom een ​​alias gegeven van City ) wordt een sleutel, en de Population kolom wordt een waarde.

We gebruiken ook een GROUP BY clausule om de resultaten te groeperen op de District kolom (in dit geval hebben we een alias voor deze kolom gemaakt met de naam State ).

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

Resultaat:

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

In dit geval hebben we de steden gegroepeerd op staat/district. Als we echter slechts één groot JSON-object willen dat alle steden/populaties voor dat land bevat, kunnen we de staat/het district (en de bijbehorende GROUP BY verwijderen) clausule) helemaal uit de query.

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

Resultaat:

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

Zie ook de JSON_ARRAYAGG() functie waarmee u uw zoekopdrachtresultaten kunt samenvoegen tot een JSON-array.


  1. Waarom slaat de sql-server vraagtekentekens op in plaats van Japanse tekens in NVarchar-velden?

  2. Best practices voor noodherstel van Microsoft SQL Server

  3. SESSIONTIMEZONE Functie in Oracle

  4. Databaserijen bijwerken zonder de tabel te vergrendelen in PostgreSQL 9.2