Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_OBJECTAGG() – Utwórz obiekt JSON z wyników zapytania w MySQL

MySQL zawiera funkcję agregującą o nazwie JSON_OBJECTAGG() . Ta funkcja umożliwia utworzenie obiektu JSON zawierającego pary klucz-wartość. Dokładniej, pozwala stworzyć ten obiekt JSON na podstawie wyników zapytania.

Przyjmuje dwa argumenty, z których pierwszy jest używany jako klucz, a drugi jako wartość. Te argumenty mogą być nazwami kolumn lub wyrażeniami.

Składnia

Składnia wygląda tak:

JSON_OBJECTAGG(key, value)

Gdzie key to kolumna lub wyrażenie reprezentujące klucz pary klucz/wartość i value to kolumna lub wyrażenie reprezentujące wartość pary klucz/wartość.

Przykład

Oto przykład do zademonstrowania.

Oto typowe zapytanie, które możemy uruchomić bez JSON_OBJECTAGG() funkcja:

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

Wynik:

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

Możemy dostosować to zapytanie, aby Name kolumna (w tym przykładzie nadaliśmy tej kolumnie alias City ) staje się kluczem, a Population kolumna staje się wartością.

Używamy również GROUP BY klauzula grupująca wyniki według District kolumna (w tym przypadku utworzyliśmy alias dla tej kolumny o nazwie State ).

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

Wynik:

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

W tym przypadku pogrupowaliśmy miasta według stanu/okręgu. Jeśli jednak chcemy tylko jednego dużego obiektu JSON zawierającego wszystkie miasta/populacje dla tego kraju, możemy usunąć stan/okręg (i powiązany z nim GROUP BY klauzula) w całości z zapytania.

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

Wynik:

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

Zobacz także JSON_ARRAYAGG() funkcja, która pozwala agregować wyniki zapytania w tablicę JSON.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mysql wstaw format daty

  2. Proste wprowadzenie do korzystania z MySQL na terminalu Linux

  3. Harmonogram zdarzeń MySQL codziennie o określonej godzinie

  4. NOW() Przykłady – MySQL

  5. jak uzyskać identyfikator ostatniego wstawienia po zapytaniu o wstawienie w aktywnym rekordzie codeigniter