Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_OBJECTAGG () - Tạo một đối tượng JSON từ kết quả truy vấn trong MySQL

MySQL bao gồm một hàm tổng hợp được gọi là JSON_OBJECTAGG() . Hàm này cho phép bạn tạo một đối tượng JSON chứa các cặp khóa-giá trị. Cụ thể hơn, nó cho phép bạn tạo đối tượng JSON này dựa trên kết quả của một truy vấn.

Nó chấp nhận hai đối số, đối số đầu tiên được sử dụng làm khóa và đối số thứ hai làm giá trị. Các đối số này có thể là tên cột hoặc biểu thức.

Cú pháp

Cú pháp như sau:

JSON_OBJECTAGG(key, value)

Khóa key là cột hoặc biểu thức đại diện cho khóa của cặp khóa / giá trị và value là cột hoặc biểu thức đại diện cho giá trị của cặp khóa / giá trị.

Ví dụ

Đây là một ví dụ để chứng minh.

Đây là một truy vấn phổ biến mà chúng tôi có thể chạy không có JSON_OBJECTAGG() chức năng:

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

Kết quả:

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

Chúng tôi có thể điều chỉnh truy vấn đó để Name (trong ví dụ này, chúng tôi đã đặt cho cột này một bí danh là City ) trở thành một khóa và Population cột trở thành một giá trị.

Chúng tôi cũng sử dụng GROUP BY mệnh đề để nhóm các kết quả theo District (trong trường hợp này, chúng tôi đã tạo một bí danh cho cột này có tên là State ).

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

Kết quả:

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

Trong trường hợp này, chúng tôi đã nhóm các thành phố theo tiểu bang / quận của chúng. Tuy nhiên, nếu chúng ta chỉ muốn một đối tượng JSON lớn chứa tất cả các thành phố / dân số cho quốc gia đó, chúng ta có thể xóa tiểu bang / quận (và GROUP BY được liên kết với nó mệnh đề) từ truy vấn hoàn toàn.

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

Kết quả:

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

Cũng xem JSON_ARRAYAGG() cho phép bạn tổng hợp các kết quả truy vấn của mình thành một mảng 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. Thay đổi múi giờ MySQL?

  2. Tìm hiểu cách sao lưu cơ sở dữ liệu MySQL của bạn

  3. Cách thiết lập sao chép không đồng bộ từ Galera Cluster sang máy chủ MySQL độc lập với GTID

  4. Cú pháp CƠ SỞ DỮ LIỆU SQL DROP - Được DBMS liệt kê

  5. Truyền tham số vào dòng lệnh tập lệnh MySQL