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

MariaDB GROUP_CONCAT()

MariaDB memiliki GROUP_CONCAT() fungsi yang memungkinkan kita mengembalikan kolom dari kueri sebagai daftar yang dibatasi.

Sintaks

Sintaksnya seperti ini:

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

Contoh

Misalkan kita menjalankan kueri berikut:

SELECT PetName 
FROM Pets;

Dan kita mendapatkan hasil sebagai berikut:

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set (0.001 sec)

Kita dapat menggunakan GROUP_CONCAT() untuk mengembalikan semua baris itu sebagai daftar yang dibatasi.

Untuk mencapai ini, yang perlu kita lakukan adalah meneruskan PetName kolom sebagai argumen ke GROUP_CONCAT() fungsi:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Hasil:

+-------------------------------------------------+
| GROUP_CONCAT(PetName)                           |
+-------------------------------------------------+
| Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow |
+-------------------------------------------------+
1 row in set (0.003 sec)

Memesan

Kita dapat menggunakan ORDER BY klausa untuk memesan output dari fungsi ini:

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

Hasil:

Wag,Tweet,Scratch,Meow,Fluffy,Fluffy,Fetch,Bark

Perhatikan bahwa ini hanya mengurutkan output dari GROUP_CONCAT() fungsi – ini benar-benar tidak tergantung pada urutan apa pun yang diterapkan ke SELECT pernyataan itu sendiri.

Membatasi Output

Kita dapat menggunakan LIMIT klausa untuk membatasi berapa banyak item yang termasuk dalam daftar:

SELECT GROUP_CONCAT(PetName LIMIT 3)
FROM Pets;

Hasil:

Fluffy,Fetch,Scratch

Setiap pemesanan diterapkan sebelum LIMIT klausa:

SELECT GROUP_CONCAT(PetName ORDER BY PetName DESC LIMIT 3)
FROM Pets;

Hasil:

Wag,Tweet,Scratch

Perhatikan bahwa LIMIT klausa hanya didukung dari MariaDB 10.3.3.

Yang DISTINCT Klausa

Kita dapat menggunakan DISTINCT klausa untuk mengembalikan nilai unik. Dengan kata lain, jika ada nilai duplikat, hanya satu kemunculan yang dikembalikan:

SELECT GROUP_CONCAT(DISTINCT PetName ORDER BY PetName ASC)
FROM Pets;

Hasil:

Bark,Fetch,Fluffy,Meow,Scratch,Tweet,Wag

Dalam hal ini, Fluffy hanya muncul sekali. Saat kami menjalankannya tanpa kode DISTINCT klausa, Fluffy muncul dua kali.

Mengubah Pemisah

Secara default, daftar menggunakan koma sebagai pembatas. Tapi kita bisa mengubahnya jika kita mau:

SELECT GROUP_CONCAT(PetName SEPARATOR '-')
FROM Pets;

Hasil:

Fluffy-Fetch-Scratch-Wag-Tweet-Fluffy-Bark-Meow

Kita bahkan dapat menggunakan string kosong untuk menghapus semua pemisah (sehingga nilainya digabungkan):

SELECT GROUP_CONCAT(PetName SEPARATOR '')
FROM Pets;

Dan kita mendapatkan hasil sebagai berikut:

FluffyFetchScratchWagTweetFluffyBarkMeow

Hasil Kueri yang Dikelompokkan

Kami dapat menyertakan GROUP_CONCAT() dalam kueri dengan GROUP BY klausa untuk mencapai hasil seperti ini:

SELECT 
    PetTypeId,
    GROUP_CONCAT(PetName ORDER BY PetName ASC)
FROM Pets
GROUP BY PetTypeId
ORDER BY PetTypeId;

Hasil:

+-----------+--------------------------------------------+
| PetTypeId | GROUP_CONCAT(PetName ORDER BY PetName ASC) |
+-----------+--------------------------------------------+
|         1 | Tweet                                      |
|         2 | Fluffy,Meow,Scratch                        |
|         3 | Bark,Fetch,Fluffy,Wag                      |
+-----------+--------------------------------------------+

Di database saya, nama jenis hewan peliharaan yang sebenarnya ada di tabel lain yang disebut PetTypes . Oleh karena itu, kami dapat menjalankan INNER JOIN pada PetTypes tabel untuk mendapatkan nama jenis hewan peliharaan yang sebenarnya:

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

Hasil:

+---------+------------------------------------------------+
| PetType | GROUP_CONCAT(p.PetName ORDER BY p.PetName ASC) |
+---------+------------------------------------------------+
| Bird    | Tweet                                          |
| Cat     | Fluffy,Meow,Scratch                            |
| Dog     | Bark,Fetch,Fluffy,Wag                          |
+---------+------------------------------------------------+

Batasan Panjang

Panjang maksimum yang dikembalikan dalam byte ditentukan oleh group_concat_max_len variabel sistem server, yang defaultnya adalah 1M (di MariaDB 10.2.4 dan lebih tinggi) atau 1K (di MariaDB 10.2.3 dan lebih rendah). Jika group_concat_max_len adalah 512 atau lebih rendah, jenis pengembaliannya adalah VARBINARY atau VARCHAR; jika tidak, jenis pengembaliannya adalah BLOB atau TEXT . Pilihan antara jenis biner atau non-biner tergantung dari input.

Anda dapat memeriksa nilai saat ini seperti ini:

SHOW VARIABLES LIKE '%group_concat%';

Sintaks untuk mengubah nilai ini adalah sebagai berikut:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Dimana val adalah bilangan bulat tidak bertanda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Numerik MariaDB (Daftar Lengkap)

  2. Perbaiki "ERROR 1250 (42000):Tabel '...' dari salah satu SELECT tidak dapat digunakan dalam klausa ORDER" di MariaDB

  3. Enkripsi MariaDB Penuh Saat Istirahat dan Dalam Perjalanan untuk Perlindungan Data Maksimum - Bagian Kedua

  4. Memperkenalkan MariaDB Platform X5:database beban kerja apa pun, sekarang dalam skala apa pun

  5. Bagaimana ROUND() Bekerja di MariaDB