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

MySQL Group_Concat() vs T-SQL String_Agg()

Salah satu fungsi T-SQL yang diperkenalkan di SQL Server 2017 adalah STRING_AGG() fungsi. Ini pada dasarnya setara dengan GROUP_CONCAT() MySQL fungsi – ini memungkinkan Anda mengembalikan hasil kueri sebagai daftar yang dibatasi, bukan dalam baris.

Namun ada beberapa perbedaan kecil antara kedua fungsi tersebut.

Artikel ini membahas beberapa perbedaan sintaks utama antara fungsi-fungsi ini.

Sintaks

Pertama, inilah sintaks resmi untuk setiap fungsi.

MySQL – GROUP_CONCAT()

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

T-SQL – STRING_AGG()

STRING_AGG ( ekspresi, pemisah ) [  ] ::=WITHIN GROUP ( ORDER BY  [ ASC | DESC ] )

Perbedaan Sintaks

Berikut adalah tiga perbedaan sintaks utama antara GROUP_CONCAT() MySQL dan T-SQL STRING_AGG() fungsi:

  • Pemisah Default :Mungkin perbedaan yang paling jelas adalah fakta bahwa STRING_AGG() mengharuskan Anda untuk menentukan pemisah. Jika Anda tidak memberikan dua argumen (yang kedua adalah pemisah), Anda akan mendapatkan kesalahan. Dengan GROUP_CONCAT() MySQL fungsi di sisi lain, pemisah adalah argumen opsional. Jika Anda tidak memberikannya, koma secara default akan digunakan.
  • Mengurutkan Hasil :Sementara fungsi MySQL dan T-SQL memungkinkan Anda untuk menambahkan ORDER BY klausa, sintaksnya sedikit berbeda. T-SQL mengharuskan Anda untuk menggunakan WITHIN GROUP klausa saat memesan kumpulan hasil, sedangkan MySQL tidak memiliki persyaratan ini.
  • Hasil Berbeda :MySQL memungkinkan Anda untuk menggunakan DISTINCT untuk mengembalikan hanya nilai unik. T-SQL tidak menyediakan opsi ini.

Berikut adalah contoh untuk menunjukkan perbedaan ini.

Pemisah Default

MySQL – GROUP_CONCAT()

Kita tidak perlu menentukan pemisah di MySQL. Ini adalah argumen opsional. Nilai defaultnya adalah koma.

PILIH GROUP_CONCAT(Genre) SEBAGAI HasilFROM Genre;

Hasil:

+------------------------------------------------- +| Hasil |+---------------------------------------------+ | Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk |+-------------------------------- --------------+

T-SQL – STRING_AGG()

T-SQL mengharuskan kita untuk menentukan pemisah.

SELECT STRING_AGG(Genre, ',') AS ResultFROM Genres;

Hasil:

Hasil ------------------------------------------------------- Batu, Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Jika kami tidak menentukan pemisah, kami mendapatkan kesalahan:

PILIH STRING_AGG(Genre) SEBAGAI HasilFROM Genre;

Hasil:

Kesalahan:Fungsi STRING_AGG memerlukan 2 argumen.

Mengurutkan Hasil

MySQL – GROUP_CONCAT()

Saat memesan hasil yang ditetapkan di MySQL, cukup tambahkan ORDER BY klausa sebagai argumen, diikuti oleh kolom untuk mengurutkannya, diikuti oleh ASC atau DESC tergantung pada apakah Anda menginginkannya dalam urutan menaik atau menurun.

GUNAKAN Musik;PILIH ar.ArtistName AS 'Artist', GROUP_CONCAT(al.AlbumName ORDER BY al.AlbumName DESC) AS 'Daftar Album'FROM Artis arINNER JOIN Albums alON ar.ArtistId =al.ArtistIdGROUP BY ArtistName; 

Hasil:

+------------------------+--------------------- -------------------------------------------------- -----+| Artis | Daftar Album |+------------------------+--------------------- -------------------------------------------------- -----+| AC/DC | Daya || Allan Holdsworth | Enam Belas Pria Tain, Salah Sepanjang Malam || Teman Kaya | Wajah Ayunan Besar || Devin Townsend | Ziltoid yang Mahatahu,Epicloud,Korban Keren || Gadis Besi | Di suatu tempat dalam Waktu,Powerslave,Piece of Mind,Tidak Ada Doa untuk Kematian,Pembunuh || Jim Reeves | Bernyanyi di Jalan || Michael Belajar Rock | Skandinavia,Keabadian,Malam Biru || Skrip | Tidak Ada Suara Tanpa Keheningan || Tom Jones | Pujian dan Salahkan, Koper Lama Hilang, Seiring Datangnya Jones |+------------------------+------------ -------------------------------------------------- --------------+

T-SQL – STRING_AGG()

Saat memesan hasil gabungan dengan ORDER BY ,  SQL Server mengharuskan WITHIN GROUP klausa yang digunakan.

GUNAKAN Musik;PILIH ar.ArtistName SEBAGAI 'Artis', STRING_AGG(al.AlbumName, ', ') WITHIN GROUP (ORDER BY al.AlbumName DESC) SEBAGAI 'Daftar Album'FROM Artis arINNER JOIN Albums alON ar.ArtistId =al.ArtistIdGROUP BY ArtistName;

Hasil:

Daftar Album Artis ------------------------------------ ------------------- -------------------------------------------------- ---------AC/DC Powerage Allan Holdsworth Enam Belas Pria Tain, Sepanjang Malam Salah Sobat Kaya Ayunan Besar Wajah Devin Townsend Ziltoid yang Mahatahu, Epicloud, Korban Iron Maiden Keren Di Suatu Tempat Dalam Waktu, Powerslave, Sepotong Pikiran, Tidak Ada Doa untuk Kematian, PembunuhJim Reeves Bernyanyi di Jalan Michael Belajar Mengguncang Skandinavia, Keabadian, Malam Biru Naskah Tidak Ada Suara Tanpa Diam e Tom Jones Puji dan Blame, Koper Lama Hilang, Seiring Datangnya Jones 

Hasil Berbeda

MySQL – GROUP_CONCAT()

GROUP_CONCAT() MySQL mendukung DISTINCT klausa, yang memungkinkan Anda menghilangkan nilai duplikat dari kumpulan hasil.

GUNAKAN Solusi;PILIH GROUP_CONCAT(Nama Tugas BERBEDA) DARI Tugas;

Hasil:

+------------------------------------------------- ----------+| GROUP_CONCAT(Nama Tugas BERBEDA) |+------------------------------------------- -------------+| Berkebun, Memberi makan kucing, Mengecat atap, Bersantai, Mengajak anjing jalan-jalan |+--------------------------------- -----------------------+

T-SQL – STRING_AGG()

STRING_AGG() T-SQL fungsi tidak mendukung DISTINCT klausa.

GUNAKAN Solusi;SELECT STRING_AGG(DISTINCT TaskName, ',') FROM Tasks;

Hasil:

Error:Sintaks salah di dekat ','.

Seperti yang diharapkan, kesalahan terjadi jika kami mencoba menggunakan DISTINCT klausa dengan STRING_AGG() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transposisi Kolom Dinamis ke Baris

  2. Bagaimana cara menjalankan dua kueri mysql sebagai satu di PHP/MYSQL?

  3. Apakah MySQL mengindeks kolom kunci asing secara otomatis?

  4. mysqli atau PDO - apa kelebihan dan kekurangannya?

  5. XAMPP - MySQL mati secara tidak terduga