Trong số nhiều hàm tổng hợp MySQL có một hàm được gọi là JSON_ARRAYAGG()
. Hàm này cho phép bạn tổng hợp tập hợp kết quả dưới dạng một mảng JSON duy nhất. Mỗi hàng của tập hợp kết quả kết thúc như một phần tử duy nhất trong mảng.
Thứ tự của các phần tử trong mảng là không xác định.
Cú pháp
Cú pháp như sau:
JSON_ARRAYAGG(col_or_expr)
Ở đâu col_or_expr
là một cột hoặc một biểu thức đánh giá một giá trị duy nhất.
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 mà không có JSON_ARRAYAGG()
chức năng:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Kết quả:
+-----------------+---------------+ | State | City | +-----------------+---------------+ | Capital Region | Canberra | | New South Wales | Sydney | | New South Wales | Newcastle | | New South Wales | Central Coast | | New South Wales | Wollongong | | Queensland | Brisbane | | Queensland | Gold Coast | | Queensland | Townsville | | Queensland | Cairns | | South Australia | Adelaide | | Tasmania | Hobart | | Victoria | Melbourne | | Victoria | Geelong | | West Australia | Perth | +-----------------+---------------+
Chúng tôi có thể điều chỉnh truy vấn đó, để mỗi thành phố trở thành một phần tử trong một mảng. Để thực hiện việc này, chúng tôi chỉ cần chuyển Name
(tên thành phố) thành JSON_ARRAYAGG()
chức năng.
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_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Kết quả:
+-----------------+--------------------------------------------------------+ | State | Cities | +-----------------+--------------------------------------------------------+ | Capital Region | ["Canberra"] | | New South Wales | ["Sydney", "Newcastle", "Central Coast", "Wollongong"] | | Queensland | ["Brisbane", "Gold Coast", "Townsville", "Cairns"] | | South Australia | ["Adelaide"] | | Tasmania | ["Hobart"] | | Victoria | ["Melbourne", "Geelong"] | | West Australia | ["Perth"] | +-----------------+--------------------------------------------------------+
Cũng xem JSON_OBJECTAGG()
cho phép bạn tạo một đối tượng JSON từ một truy vấn.