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. DenganGROUP_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 menggunakanWITHIN 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 mengharuskanWITHIN 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 JonesHasil Berbeda
MySQL – GROUP_CONCAT()
GROUP_CONCAT()
MySQL mendukungDISTINCT
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 mendukungDISTINCT
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 denganSTRING_AGG()
.