MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

MariaDB JSON_ARRAYAGG() Dijelaskan

Di MariaDB, JSON_ARRAYAGG() adalah fungsi bawaan yang mengembalikan larik JSON yang berisi elemen untuk setiap nilai dalam kumpulan nilai JSON atau SQL tertentu.

Fungsi bekerja pada kolom atau ekspresi yang mengevaluasi ke nilai tunggal. Ini memungkinkan Anda untuk menggabungkan kumpulan hasil sebagai larik JSON tunggal. Setiap baris dari kumpulan hasil berakhir sebagai elemen tunggal dalam larik.

Sintaks

Sintaksnya seperti ini:

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

Contoh

Misalkan kita membuat kueri tabel:

SELECT PetName
FROM Pets; 

Dan dapatkan set hasil berikut:

+---------+| Nama Hewan Peliharaan |+---------+| Halus || Ambil || Goresan || Goyang || Tweet || Halus || Kulit kayu || Meow |+---------+

Hasilnya adalah satu kolom, dan setiap baris berisi nama hewan peliharaan yang berbeda.

Katakanlah kita ingin semua hewan peliharaan dicantumkan dalam larik JSON (sehingga setiap nama hewan peliharaan adalah elemen lariknya sendiri).

Kita dapat menggunakan JSON_ARRAYAGG() berfungsi untuk melakukan hal itu:

SELECT JSON_ARRAYAGG(PetName)
FROM Pets; 

Hasil:

+------------------------------------------------- ----------+| JSON_ARRAYAGG(Nama Hewan Peliharaan) |+-------------------------------------------------------- -----------------------+| ["Fluffy",,"Ambil",,"Scratch",,"Wag",,"Tweet",,"Fluffy",,"Bark",,"Meow"] |+--------------- -------------------------------------------------- --+

Yang kami lakukan hanyalah meneruskan nama kolom ke JSON_ARRAYAGG() fungsi.

Hasil Berbeda

Kita dapat menambahkan DISTINCT klausa untuk menghapus nilai duplikat dari array:

SELECT JSON_ARRAYAGG(DISTINCT PetName)
FROM Pets; 

Hasil:

+------------------------------------------------- ------------+| JSON_ARRAYAGG(Nama Hewan Peliharaan BERBEDA) |+------------------------------------------- ---------------+| ["Bark",,"Ambil",,"Fluffy",,"Meow",,"Scratch",,"Tweet",,"Wag"] |+------------------- --------------------------------------------------+

Perhatikan bahwa Fluffy hanya disertakan sekali di sini, sedangkan Fluffy dimasukkan dua kali dalam contoh sebelumnya (karena ada dua hewan peliharaan yang disebut Fluffy ).

Pesan Hasil

Kita dapat menggunakan ORDER BY klausa untuk menentukan urutan elemen array:

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

Hasil:

+------------------------------------------------- ----------+| JSON_ARRAYAGG(PetName ORDER BY PetName DESC) |+---------------------------------------- ---------------------------+| ["Wag", "Tweet", "Gores", "Meong", "Fluffy", "Fluffy", "Ambil","Bark"] |+--------------- -------------------------------------------------- --+

Batasi Hasil

Kita dapat menggunakan LIMIT klausa untuk menentukan urutan elemen array:

SELECT JSON_ARRAYAGG(PetName LIMIT 3)
FROM Pets; 

Hasil:

+--------------------------------+| JSON_ARRAYAGG(Batas Nama Hewan Peliharaan 3) |+--------------------------------+| ["Fluffy",,"Ambil","Scratch"] |+--------------------------------+ 

Kami juga dapat menggunakan offset untuk LIMIT klausa:

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

Hasil:

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

Atau, kita dapat menghilangkan LIMIT dan OFFSET kata kunci, dan ganti angkanya (dan pisahkan dengan koma) untuk mendapatkan hasil yang sama:

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

Hasil:

+-----------------------------------+| JSON_ARRAYAGG(Nama Hewan Peliharaan BATAS 2, 3) |+------------------------------------+| ["Scratch", "Wag", "Tweet"] |+----------------------------------- +

Hasil yang Dikelompokkan

Kita dapat menggunakan SQL GROUP BY klausa untuk menghasilkan array berdasarkan pengelompokan kolom lain.

Misalkan kita menambahkan kolom ke kueri asli kita:

SELECT 
    PetTypeId,
    PetName
FROM Pets; 

Hasil:

+-----------+--------+| PetTypeId | PetName |+------------+---------+| 2 | Halus || 3 | Ambil || 2 | Goresan || 3 | Goyang || 1 | Tweet || 3 | Halus || 3 | Kulit kayu || 2 | Meow |+------------+---------+

Sekarang kita memiliki PetTypeId kolom serta PetName kolom. Ini cocok dengan jenis hewan peliharaan untuk setiap nama.

Berikut ini contoh penggunaan GROUP BY klausa untuk mengelompokkan hasil kami dengan PetTypeId kolom saat menggunakan JSON_ARRAYAGG() fungsi:

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

Hasil:

+-----------+---------------------------------+ | PetTypeId | JSON_ARRAYAGG(Nama Hewan Peliharaan) |+-----------+-------------------------------- -+| 1 | ["Tweet"] || 2 | ["Fluffy",,"Scratch",,"Meow"] || 3 | ["Ambil",,"Wag",,"Fluffy",,"Bark"] |+-----------+------------------- --------------+

Ini memungkinkan kami untuk membuat larik terpisah untuk setiap jenis hewan peliharaan.

Kueri berikut menggunakan INNER JOIN di meja lain untuk mengembalikan jenis hewan peliharaan yang sebenarnya, bukan hanya ID.

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

Hasil:

+---------+---------+| Jenis Hewan Peliharaan | PetName |+---------+---------+| Burung | Tweet || Kucing | Goresan || Kucing | Halus || Kucing | Meong || Anjing | Goyang || Anjing | Ambil || Anjing | Kulit kayu || Anjing | Fluffy |+---------+---------+

Kita dapat melihat bahwa setiap jenis hewan peliharaan terdaftar di kolom pertama dan nama hewan peliharaan tercantum di kolom kedua.

Sekarang mari kita gunakan JSON_ARRAYAGG() fungsi:

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

Hasil:

+---------+--------------------------+| Jenis Hewan Peliharaan | JSON_ARRAYAGG(p.PetName) |+---------+--------------------------+| Burung | Tweet || Kucing | Gores, Halus, Meong || Anjing | 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. 4 Fungsi untuk Mengembalikan Tahun dari Tanggal di MariaDB

  2. 2 Cara Mengembalikan Baris yang Hanya Mengandung Karakter Non-Alfanumerik di MariaDB

  3. Menggunakan Mesin Penyimpanan MyRocks dengan Server MariaDB

  4. Praktik Terbaik dalam Penskalaan Basis Data:Bagian Kedua

  5. Panduan untuk Otomatisasi Basis Data dengan Kontrol Cluster Somenines