Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_OBJECTAGG() – Създайте JSON обект от резултатите от заявката в MySQL

MySQL включва агрегатна функция, наречена JSON_OBJECTAGG() . Тази функция ви позволява да създадете JSON обект, съдържащ двойки ключ-стойност. По-конкретно, той ви позволява да създадете този JSON обект въз основа на резултатите от заявка.

Той приема два аргумента, като първият от тях се използва като ключ, а вторият като стойност. Тези аргументи могат да бъдат имена на колони или изрази.

Синтаксис

Синтаксисът е така:

JSON_OBJECTAGG(key, value)

Където key е колоната или изразът, който представлява ключ на двойката ключ/стойност и value е колоната или изразът, който представлява стойността на двойката ключ/стойност.

Пример

Ето пример за демонстрация.

Ето една често срещана заявка, която може да изпълняваме без JSON_OBJECTAGG() функция:

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

Резултат:

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

Можем да коригираме тази заявка, така че Name колона (в този пример сме дали на тази колона псевдоним на City ) става ключ, а Population колоната става стойност.

Ние също така използваме GROUP BY клауза за групиране на резултатите по District колона (в този случай сме създали псевдоним за тази колона, наречен State ).

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

Резултат:

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

В този случай групирахме градовете по техния щат/област. Въпреки това, ако искаме само един голям JSON обект, съдържащ всички градове/населения за тази държава, можем да премахнем държавата/окръга (и свързания с него GROUP BY клауза) от заявката като цяло.

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

Резултат:

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

Вижте също JSON_ARRAYAGG() функция, която ви позволява да агрегирате резултатите от заявката си в 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. Импортиране на csv в mysql чрез команден ред

  2. Буболечка? #1146 - Таблица 'xxx.xxxxx' не съществува

  3. MySQL CAST – Как да въведете Cast в MySQL

  4. 60 милиона записи, изберете записи от определен месец. Как да оптимизираме базата данни?

  5. Недефинирана функция mysql_connect()