Dengan menggunakan MySQL
, saya dapat melakukan sesuatu seperti:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
Output saya:
shopping
fishing
coding
tetapi saya hanya ingin 1 baris, 1 col:
Output yang Diharapkan:
shopping, fishing, coding
Alasannya adalah bahwa saya memilih beberapa nilai dari beberapa tabel, dan setelah semua bergabung, saya punya lebih banyak baris daripada yang saya inginkan.
Saya telah mencari fungsi di MySQL Doc dan tidak terlihat seperti CONCAT
atau CONCAT_WS
fungsi menerima set hasil.
Jadi, apakah ada orang di sini yang tahu bagaimana melakukan ini?
mysql
sql
concat
group-concat
Dean Sebaliknya
sumber
sumber
Jawaban:
Anda bisa menggunakan
GROUP_CONCAT
:Seperti yang dikatakan Ludwig dalam komentarnya, Anda dapat menambahkan
DISTINCT
operator untuk menghindari duplikat:Seperti yang dinyatakan Jan dalam komentar mereka, Anda juga bisa mengurutkan nilai sebelum mengimplementasikannya menggunakan
ORDER BY
:Seperti yang dinyatakan Dag dalam komentarnya, ada batas 1024 byte pada hasilnya. Untuk mengatasi ini, jalankan kueri ini sebelum kueri Anda:
Tentu saja, Anda dapat mengubah
2048
sesuai dengan kebutuhan Anda. Untuk menghitung dan menetapkan nilainya:sumber
DISTINCT
parameter, Anda tidak akan mendapatkan ganda.... GROUP_CONCAT(DISTINCT hobbies)
SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id
Lihat
GROUP_CONCAT
apakah versi MySQL Anda (4.1) mendukungnya. Lihat dokumentasi untuk lebih jelasnya.Itu akan terlihat seperti:
sumber
group by 'all'
tidak perlu (apalagi yang tidak diinginkan), karena ini menetapkan untuk semua baris stringall
dan kemudian membandingkan string antara baris ini. Apakah saya benar?Sintaks alternatif untuk menggabungkan beberapa baris individual
PERINGATAN: Posting ini akan membuat Anda lapar.
Diberikan:
Saya mendapati diri saya ingin memilih beberapa baris individual — bukan grup — dan bergabung dalam bidang tertentu.
Katakanlah Anda memiliki tabel id produk dan nama serta harganya:
Maka Anda memiliki beberapa ajax schmancy mewah yang mencantumkan anak-anak anjing ini sebagai kotak centang.
Pengguna hippo lapar Anda memilih
13, 15, 16
. Tidak ada makanan penutup untuknya hari ini ...Temukan:
Cara untuk meringkas pesanan pengguna Anda dalam satu baris, dengan mysql murni.
Larutan:
Gunakan
GROUP_CONCAT
dengan paraIN
klausa :Output yang mana:
Solusi Bonus:
Jika Anda juga ingin harga total, masukkan
SUM()
:PS: Permintaan maaf jika Anda tidak memiliki In-N-Out di dekatnya ...
sumber
Anda dapat mengubah panjang maks
GROUP_CONCAT
nilai dengan mengaturgroup_concat_max_len
parameter.Lihat detail dalam dokumentasi MySQL .
sumber
Ada fungsi Agregat GROUP, GROUP_CONCAT .
sumber
Dalam kasus saya, saya memiliki deretan Id, dan itu perlu untuk melemparkannya ke char, jika tidak, hasilnya dikodekan ke dalam format biner:
sumber
CAST
saya punya nilai SEPERTI[BLOB - 14 Bytes]
dalam hasil!Gunakan variabel sesi MySQL (5.6.13) dan operator penugasan seperti berikut
maka kamu bisa mendapatkan
sumber
SELECT @logmsg := CONCAT_ws(',',@logmsg,description) from test
Saya memiliki kueri yang lebih rumit, dan menemukan bahwa saya harus menggunakan
GROUP_CONCAT
kueri luar untuk membuatnya berfungsi:Permintaan Asli:
Meledak:
Semoga ini bisa membantu seseorang.
sumber
Untuk seseorang yang mencari di sini cara menggunakan
GROUP_CONCAT
dengan subquery - memposting contoh iniJadi
GROUP_CONCAT
harus digunakan di dalam subquery, bukan membungkusnya.sumber
Coba ini:
sumber
kami memiliki dua cara untuk menggabungkan kolom di MySql
Atau
sumber