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

MariaDB JSON_OBJECTAGG () Giải thích

Trong MariaDB, JSON_OBJECTAGG() là một hàm tích hợp trả về một đối tượng JSON có chứa các cặp khóa-giá trị, dựa trên hai đối số của nó.

Cú pháp

Cú pháp như sau:

JSON_OBJECTAGG(key, value)

Hàm chấp nhận hai biểu thức đánh giá một giá trị hoặc hai tên cột làm đối số. Đối số đầu tiên là khóa và đối số thứ hai là giá trị của nó.

Ví dụ

Dưới đây là một ví dụ đơn giản để chứng minh:

SELECT JSON_OBJECTAGG("name", "Homer");

Kết quả:

+---------------------------------+
| JSON_OBJECTAGG("name", "Homer") |
+---------------------------------+
| {"name":"Homer"}                |
+---------------------------------+

Mặc dù ví dụ này trình bày cách hoạt động của hàm, nhưng lợi ích thực sự sẽ mang lại khi làm việc với các cột hoặc các biểu thức khác.

Dưới đây là các ví dụ sử dụng cột cơ sở dữ liệu cho các đối số.

Một ví dụ về cơ sở dữ liệu

Giả sử chúng ta truy vấn một bảng:

SELECT 
    PetName,
    DOB
FROM Pets;

Và nhận được tập hợp kết quả sau:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
+---------+------------+

Bây giờ chúng ta hãy chạy một truy vấn chuyển từng cột đến JSON_OBJECTAGG() để các kết quả được trả về dưới dạng một đối tượng JSON:

SELECT JSON_OBJECTAGG(PetName, DOB)
FROM Pets
WHERE DOB < '2020-04-01';

Kết quả:

+--------------------------------------------------------------------+
| JSON_OBJECTAGG(PetName, DOB)                                       |
+--------------------------------------------------------------------+
| {"Fetch":"2019-08-16", "Scratch":"2018-10-01", "Wag":"2020-03-15"} |
+--------------------------------------------------------------------+

Tất cả những gì chúng tôi đã làm là chuyển tên cột vào JSON_OBJECTAGG() hàm số.

Chúng tôi cũng đã sử dụng WHERE để thu hẹp kết quả xuống một chút.

Kết quả được nhóm

Chúng ta có thể sử dụng SQL GROUP BY mệnh đề để tạo các đối tượng JSON dựa trên nhóm của một cột khác.

Giả sử chúng ta thêm một cột vào truy vấn ban đầu của mình:

SELECT 
    PetTypeId,
    PetName,
    DOB
FROM Pets;

Kết quả:

+-----------+---------+------------+
| PetTypeId | PetName | DOB        |
+-----------+---------+------------+
|         2 | Fluffy  | 2020-11-20 |
|         3 | Fetch   | 2019-08-16 |
|         2 | Scratch | 2018-10-01 |
|         3 | Wag     | 2020-03-15 |
|         1 | Tweet   | 2020-11-28 |
|         3 | Fluffy  | 2020-09-17 |
|         3 | Bark    | NULL       |
|         2 | Meow    | NULL       |
+-----------+---------+------------+

Bây giờ chúng ta có một PetTypeId cũng như PetNameDOB cột. Điều này phù hợp với loại vật nuôi cho từng vật nuôi.

Đây là ví dụ về việc sử dụng GROUP BY mệnh đề nhóm các kết quả của chúng tôi theo PetTypeId trong khi sử dụng JSON_OBJECTAGG() chức năng:

SELECT 
    PetTypeId,
    JSON_OBJECTAGG(PetName, DOB)
FROM Pets
GROUP BY PetTypeId;

Kết quả:

+-----------+--------------------------------------------------------------------------------+
| PetTypeId | JSON_OBJECTAGG(PetName, DOB)                                                   |
+-----------+--------------------------------------------------------------------------------+
|         1 | {"Tweet":"2020-11-28"}                                                         |
|         2 | {"Fluffy":"2020-11-20", "Scratch":"2018-10-01", "Meow":null}                   |
|         3 | {"Fetch":"2019-08-16", "Wag":"2020-03-15", "Fluffy":"2020-09-17", "Bark":null} |
+-----------+--------------------------------------------------------------------------------+

Điều này cho phép chúng tôi tạo một đối tượng JSON riêng biệt cho từng loại vật nuôi.

Truy vấn sau sử dụng INNER JOIN trên một bảng khác để trả về loại vật nuôi thực tế, không chỉ ID.

SELECT 
    pt.PetType,
    p.PetName,
    p.DOB
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType;

Kết quả:

+---------+---------+------------+
| PetType | PetName | DOB        |
+---------+---------+------------+
| Bird    | Tweet   | 2020-11-28 |
| Cat     | Scratch | 2018-10-01 |
| Cat     | Fluffy  | 2020-11-20 |
| Cat     | Meow    | NULL       |
| Dog     | Wag     | 2020-03-15 |
| Dog     | Fetch   | 2019-08-16 |
| Dog     | Bark    | NULL       |
| Dog     | Fluffy  | 2020-09-17 |
+---------+---------+------------+

Chúng ta có thể thấy rằng loại vật nuôi thực tế hiện được liệt kê trong cột đầu tiên, thay vì chỉ ID loại vật nuôi.

Bây giờ, hãy sử dụng JSON_OBJECTAGG() chức năng:

SELECT 
    pt.PetType,
    JSON_OBJECTAGG(p.PetName, p.DOB)
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
GROUP BY pt.PetType;

Kết quả:

+---------+--------------------------------------------------------------------------------+
| PetType | JSON_OBJECTAGG(p.PetName, p.DOB)                                               |
+---------+--------------------------------------------------------------------------------+
| Bird    | {"Tweet":"2020-11-28"}                                                         |
| Cat     | {"Scratch":"2018-10-01", "Fluffy":"2020-11-20", "Meow":null}                   |
| Dog     | {"Wag":"2020-03-15", "Fetch":"2019-08-16", "Bark":null, "Fluffy":"2020-09-17"} |
+---------+--------------------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo lưu trữ bản sao lưu MariaDB của bạn trên đám mây

  2. Cách triển khai MySQL hoặc MariaDB Galera Cluster sẵn sàng sản xuất bằng ClusterControl

  3. Cách thiết kế một cụm MariaDB được phân phối theo địa lý

  4. 3 cách để có được các đối chiếu có sẵn trong MariaDB

  5. Tối ưu hóa công cụ lưu trữ MySQL:Định cấu hình Tối ưu hóa InnoDB để có hiệu suất cao