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

MariaDB JSON_ARRAYAGG () Giải thích

Trong MariaDB, JSON_ARRAYAGG() là một hàm tích hợp trả về một mảng JSON chứa một phần tử cho mỗi giá trị trong một tập hợp các giá trị JSON hoặc SQL nhất định.

Hàm hoạt động trên một cột hoặc một biểu thức đánh giá một giá trị duy nhất. Nó cho phép bạn tổng hợp tập hợp kết quả thành 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.

Cú pháp

Cú pháp như sau:

 JSON_ARRAYAGG([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [LIMIT {[offset,] row_count | row_count OFFSET offset}]) 

Ví dụ

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

 SELECT PetName
FROM Pets; 

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

 + --------- + | PetName | + --------- + | Lông tơ || Tìm nạp || Cào cào || Wag || Tweet || Lông tơ || Vỏ cây || Meo meo | + --------- + 

Kết quả là một cột và mỗi hàng chứa một tên vật nuôi khác nhau.

Giả sử chúng tôi muốn tất cả vật nuôi được liệt kê trong một mảng JSON (để mỗi tên vật nuôi là phần tử mảng của riêng nó).

Chúng tôi có thể sử dụng JSON_ARRAYAGG() chức năng để làm điều đó:

 SELECT JSON_ARRAYAGG(PetName)
FROM Pets; 

Kết quả:

 + ---------------------------------------------- --------------------- + | JSON_ARRAYAGG (PetName) | + -------------------------------------------- ----------------------- + | ["Fluffy", "Fetch", "Scratch", "Wag", "Tweet", "Fluffy", "Bark", "Meow"] | + --------------- -------------------------------------------------- - + 

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

Kết quả khác biệt

Chúng tôi có thể thêm DISTINCT mệnh đề xóa các giá trị trùng lặp khỏi mảng:

 SELECT JSON_ARRAYAGG(DISTINCT PetName)
FROM Pets; 

Kết quả:

 + ---------------------------------------------- ------------ + | JSON_ARRAYAGG (DISTINCT PetName) | + ------------------------------------------- --------------- + | ["Bark", "Fetch", "Fluffy", "Meow", "Scratch", "Tweet", "Wag"] | + ------------------- --------------------------------------- + 

Lưu ý rằng Fluffy chỉ được đưa vào một lần ở đây, trong khi Fluffy đã được đưa vào hai lần trong ví dụ trước (vì có hai vật nuôi được gọi là Fluffy ).

Sắp xếp kết quả

Chúng ta có thể sử dụng ORDER BY mệnh đề để chỉ định thứ tự cho các phần tử mảng:

 SELECT JSON_ARRAYAGG(PetName ORDER BY PetName DESC)
FROM Pets; 

Kết quả:

 + ---------------------------------------------- --------------------- + | JSON_ARRAYAGG (PetName ORDER BY PetName DESC) | + ---------------------------------------- --------------------------- + | ["Wag", "Tweet", "Scratch", "Meow", "Fluffy", "Fluffy", "Fetch", "Bark"] | + --------------- -------------------------------------------------- - + 

Giới hạn kết quả

Chúng tôi có thể sử dụng LIMIT mệnh đề để chỉ định thứ tự cho các phần tử mảng:

 SELECT JSON_ARRAYAGG(PetName LIMIT 3)
FROM Pets; 

Kết quả:

 + -------------------------------- + | JSON_ARRAYAGG (PetName LIMIT 3) | + -------------------------------- + | ["Fluffy", "Fetch", "Scratch"] | + -------------------------------- +  

Chúng tôi cũng có thể sử dụng phần bù cho LIMIT mệnh đề:

 SELECT JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2)
FROM Pets; 

Kết quả:

 + ----------------------------------------- + | JSON_ARRAYAGG (PetName LIMIT 3 OFFSET 2) | + ---------------------------------------- - + | ["Scratch", "Wag", "Tweet"] | + ----------------------------------- ------ + 

Ngoài ra, chúng tôi có thể bỏ qua LIMITOFFSET từ khóa và chuyển đổi các số xung quanh (và phân tách chúng bằng dấu phẩy) để đạt được cùng một kết quả:

 SELECT JSON_ARRAYAGG(PetName LIMIT 2, 3)
FROM Pets; 

Kết quả:

 + ----------------------------------- + | JSON_ARRAYAGG (PetName LIMIT 2, 3) | + ----------------------------------- + | ["Scratch", "Wag", "Tweet"] | + ----------------------------------- + 

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

Chúng ta có thể sử dụng SQL GROUP BY mệnh đề tạo mảng 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
FROM Pets; 

Kết quả:

 + ----------- + --------- + | PetTypeId | PetName | + ----------- + --------- + | 2 | Lông tơ || 3 | Tìm nạp || 2 | Cào cào || 3 | Wag || 1 | Tweet || 3 | Lông tơ || 3 | Vỏ cây || 2 | Meo meo | + ----------- + --------- + 

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

Đâ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_ARRAYAGG() chức năng:

 SELECT 
    PetTypeId,
    JSON_ARRAYAGG(PetName)
FROM Pets
GROUP BY PetTypeId; 

Kết quả:

 + ----------- + --------------------------------- + | PetTypeId | JSON_ARRAYAGG (PetName) | + ----------- + -------------------------------- - + | 1 | ["Tweet"] || 2 | ["Fluffy", "Scratch", "Meo meo"] || 3 | ["Fetch", "Wag", "Fluffy", "Bark"] | + ----------- + ------------------- -------------- + 

Điều này cho phép chúng tôi tạo một mảng 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
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType; 

Kết quả:

 + --------- + --------- + | PetType | PetName | + --------- + --------- + | Chim | Tweet || Con mèo | Cào cào || Con mèo | Lông tơ || Con mèo | Meo meo || Con chó | Wag || Con chó | Tìm nạp || Con chó | Vỏ cây || Con chó | Fluffy | + --------- + --------- + 

Chúng ta có thể thấy rằng mỗi loại vật nuôi được liệt kê trong cột đầu tiên và tên vật nuôi được liệt kê trong cột thứ hai.

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

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

Kết quả:

 + --------- + -------------------------- + | PetType | JSON_ARRAYAGG (p.PetName) | + --------- + -------------------------- + | Chim | Tweet || Con mèo | Cào, Xạo, Meo meo || Con chó | Wag, Fetch, Bark, Fluffy | + --------- + -------------------------- + 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ClusterControl - Quản lý sao lưu nâng cao - mariabackup Phần III

  2. Chuẩn bị máy chủ MySQL hoặc MariaDB để sản xuất - Phần thứ nhất

  3. 2 cách để biết ngày nào thuộc về quý trong MariaDB

  4. Cách MINUTE () hoạt động trong MariaDB

  5. Cách DATE () hoạt động trong MariaDB