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.