Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mengembalikan Hasil Kueri sebagai Daftar Dipisahkan Koma di MySQL

Di MySQL, Anda dapat mengembalikan hasil kueri Anda sebagai daftar yang dipisahkan koma dengan menggunakan GROUP_CONCAT() fungsi.

GROUP_CONCAT() fungsi dibuat khusus untuk tujuan menggabungkan hasil kueri yang ditetapkan ke dalam daftar yang dipisahkan oleh koma, atau pembatas pilihan Anda.

Artikel ini memberikan contoh cara kerjanya.

Data

Pertama, mari gunakan data berikut dalam beberapa contoh pertama kami:

USE Solutions;
SELECT TaskName
FROM Tasks;

Hasil:

+-------------------+
| TaskName          |
+-------------------+
| Do garden         |
| Feed cats         |
| Paint roof        |
| Take dog for walk |
| Relax             |
| Feed cats         |
+-------------------+

Contoh Dasar

Berikut adalah contoh dasar untuk mendemonstrasikan GROUP_CONCAT() fungsi:

SELECT GROUP_CONCAT(TaskName) 
FROM Tasks;

Hasil:

+------------------------------------------------------------------+
| GROUP_CONCAT(TaskName)                                           |
+------------------------------------------------------------------+
| Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats |
+------------------------------------------------------------------+

Seperti yang Anda lihat, setiap baris dari kumpulan hasil telah digabungkan menjadi satu baris. Secara default, daftar dipisahkan dengan koma.

Perhatikan bahwa ada batasan berapa lama daftar ini bisa. Lebih lanjut tentang ini nanti di artikel.

Contoh – BERBEDA

Anda dapat menggunakan DISTINCT untuk menghapus duplikat (sehingga catatan duplikat menjadi satu catatan).

Contoh:

SELECT GROUP_CONCAT(DISTINCT TaskName) 
FROM Tasks;

Hasil:

+--------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName)                        |
+--------------------------------------------------------+
| Do garden,Feed cats,Paint roof,Relax,Take dog for walk |
+--------------------------------------------------------+

Jadi dalam hal ini, “Beri makan kucing” hanya dicantumkan satu kali, sedangkan pada contoh sebelumnya dicantumkan dua kali.

Contoh – ORDER OLEH

Anda dapat menggunakan ORDER BY untuk mengurutkan hasil berdasarkan kolom tertentu.

Contoh:

SELECT GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) 
FROM Tasks;

Hasil:

+--------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) |
+--------------------------------------------------------+
| Take dog for walk,Relax,Paint roof,Feed cats,Do garden |
+--------------------------------------------------------+

Jadi dalam hal ini saya menggunakan DESC untuk menentukan bahwa itu harus dalam urutan menurun. Nilai alternatif (dan default) adalah ASC untuk naik.

Contoh – Tentukan Pembatas

Secara default, daftar adalah daftar yang dipisahkan koma. Namun, Anda dapat menentukan pembatas pilihan Anda jika diperlukan.

Untuk melakukannya, gunakan SEPARATOR diikuti dengan nilai literal string yang harus disisipkan di antara nilai grup.

Contoh:

SELECT GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ') 
FROM Tasks;

Hasil:

+----------------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ')                |
+----------------------------------------------------------------+
| Do garden + Feed cats + Paint roof + Relax + Take dog for walk |
+----------------------------------------------------------------+

Contoh – Menggabungkan Kolom

Anda juga dapat menggabungkan kolom, dan menyediakan pemisahnya sendiri dengan memberikan nilai literal string.

Contoh:

SELECT GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ') 
FROM Tasks;

Hasil:

+------------------------------------------------------------------------------------+
| GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ')                                 |
+------------------------------------------------------------------------------------+
| 1) Do garden 2) Feed cats 3) Paint roof 4) Take dog for walk 5) Relax 6) Feed cats |
+------------------------------------------------------------------------------------+

Dalam contoh ini kami mengembalikan keduanya TaskId kolom dan TaskName kolom, dipisahkan oleh tanda kurung tutup dan spasi. Kami juga menggunakan SEPARATOR argumen untuk menentukan bahwa pembatas yang akan digunakan di antara setiap baris (bersambung) harus berupa spasi (bukan koma default).

Hasil yang Dikelompokkan

GROUP_CONCAT() fungsi dapat berguna untuk kesempatan di mana Anda ingin memberikan daftar hasil, dikelompokkan berdasarkan kolom lain.

Misalnya, Anda mungkin menginginkan daftar artis, dengan masing-masing artis diikuti dengan daftar album yang telah mereka rilis.

Untuk mendemonstrasikan ini, katakanlah kita memiliki database dengan dua tabel; Artists dan Albums . Ada hubungan satu ke banyak antara tabel-tabel ini. Untuk setiap artis, mungkin ada banyak album.

Jadi kueri biasa yang menggabungkan kedua tabel mungkin terlihat seperti ini:

USE Music;
SELECT ar.ArtistName,
	al.AlbumName
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId;

Hasil:

+------------------------+--------------------------+
| ArtistName             | AlbumName                |
+------------------------+--------------------------+
| Iron Maiden            | Powerslave               |
| AC/DC                  | Powerage                 |
| Jim Reeves             | Singing Down the Lane    |
| Devin Townsend         | Ziltoid the Omniscient   |
| Devin Townsend         | Casualties of Cool       |
| Devin Townsend         | Epicloud                 |
| Iron Maiden            | Somewhere in Time        |
| Iron Maiden            | Piece of Mind            |
| Iron Maiden            | Killers                  |
| Iron Maiden            | No Prayer for the Dying  |
| The Script             | No Sound Without Silence |
| Buddy Rich             | Big Swing Face           |
| Michael Learns to Rock | Blue Night               |
| Michael Learns to Rock | Eternity                 |
| Michael Learns to Rock | Scandinavia              |
| Tom Jones              | Long Lost Suitcase       |
| Tom Jones              | Praise and Blame         |
| Tom Jones              | Along Came Jones         |
| Allan Holdsworth       | All Night Wrong          |
| Allan Holdsworth       | The Sixteen Men of Tain  |
+------------------------+--------------------------+

Seperti yang Anda lihat, saat menggunakan format ini, jika seorang artis memiliki lebih dari satu album, artis tersebut akan dicantumkan beberapa kali – sekali untuk setiap album.

Kami dapat mengubah kueri ini sehingga setiap artis hanya terdaftar satu kali. Jika artis memiliki lebih dari satu album, semua album ditampilkan dalam satu bidang dalam daftar yang dipisahkan koma. Kami dapat melakukan ini berkat GROUP_CONCAT() fungsi.

Contoh:

USE Music;
SELECT ar.ArtistName,
	GROUP_CONCAT(al.AlbumName)
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

Hasil:

+------------------------+----------------------------------------------------------------------------+
| ArtistName             | GROUP_CONCAT(al.AlbumName)                                                 |
+------------------------+----------------------------------------------------------------------------+
| AC/DC                  | Powerage                                                                   |
| Allan Holdsworth       | All Night Wrong,The Sixteen Men of Tain                                    |
| Buddy Rich             | Big Swing Face                                                             |
| Devin Townsend         | Epicloud,Ziltoid the Omniscient,Casualties of Cool                         |
| Iron Maiden            | Somewhere in Time,Piece of Mind,Powerslave,Killers,No Prayer for the Dying |
| Jim Reeves             | Singing Down the Lane                                                      |
| Michael Learns to Rock | Eternity,Scandinavia,Blue Night                                            |
| The Script             | No Sound Without Silence                                                   |
| Tom Jones              | Long Lost Suitcase,Praise and Blame,Along Came Jones                       |
+------------------------+----------------------------------------------------------------------------+

Hati-hati dengan Panjangnya!

Satu hal penting yang perlu Anda perhatikan saat menggunakan GROUP_CONCAT() adalah bahwa hasilnya terpotong ke panjang maksimum yang disediakan oleh group_concat_max_len variabel sistem, yang memiliki nilai default 1024 .

Nilai variabel ini dapat disetel lebih tinggi, dengan menggunakan sintaks berikut:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Dimana val adalah bilangan bulat tak bertanda.

Namun, perhatikan bahwa panjang maksimum efektif dari nilai pengembalian itu sendiri dibatasi oleh nilai max_allowed_packet .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara MySQL, MySQLi dan PDO?

  2. Bagaimana cara mengubah kueri MSSQL CTE ke MySQL?

  3. Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda (REDUX!!)

  4. Alternatif Meja Kerja MySQL Teratas

  5. Memahami Deadlock di MySQL &PostgreSQL