Apakah mungkin untuk GROUP BY
lebih dari satu kolom dalam SELECT
permintaan MySQL ? Sebagai contoh:
GROUP BY fV.tier_id AND 'f.form_template_id'
Apakah mungkin untuk GROUP BY
lebih dari satu kolom dalam SELECT
permintaan MySQL ? Sebagai contoh:
GROUP BY fV.tier_id AND 'f.form_template_id'
Jawaban:
GROUP BY col1, col2, col3
Ya, Anda dapat mengelompokkan berdasarkan beberapa kolom. Sebagai contoh,
SELECT * FROM table
GROUP BY col1, col2
Hasilnya pertama-tama akan dikelompokkan berdasarkan col1, kemudian oleh col2. Di MySQL, preferensi kolom bergerak dari kiri ke kanan.
GROUP BY
berlaku col1+col2
. eg col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2
dan berlari GROUP BY col1,col2
akan kembali 1,1|1,3|2,2
berlawanan dengan yang 1,1|2,2
disarankan. Sedangkan GROUP BY col2, col1
akan mengubah urutan naik dari col2 kembali. 1,1|2,2|1,3
Demo: sqlfiddle.com/#!9/d5f69/1 Perhatikan bahwa id baris: 2 dikembalikan dalam kedua kasus untuk 2,2
meskipun membalik kolom.
GROUP BY
). Dan jika dalam kolom yang didefinisikan pertama ada hasil yang sama, maka hanya dalam hasil yang sama macam dengan kolom yang didefinisikan kedua
SUM
menggunakan dengan GROUP BY
. Jika GROUP BY
hanya dengan satu kolom, maka SUM
s semua nilai masing-masing berbeda (berbeda) nilai kolom sqlfiddle.com/#!9/1cbde2/2 . Jika GROUP BY
dua kolom. Kemudian mysql pada pemeriksaan pertama jika untuk nilai kolom pertama ada nilai yang berbeda di kolom kedua. Jika ya, maka mysql SUM
masing-masing nilai berbeda dari kolom kedua sqlfiddle.com/#!9/1cbde2/1 .
Ya, tetapi apa pengelompokan berdasarkan dua kolom? Yah, itu sama dengan pengelompokan berdasarkan setiap pasangan unik per baris. Urutan Anda membuat daftar kolom mengubah cara baris diurutkan.
Dalam contoh Anda, Anda akan menulis
GROUP BY fV.tier_id, f.form_template_id
Sementara itu, kodenya
GROUP BY f.form_template_id, fV.tier_id
akan memberikan hasil yang serupa, tetapi diurutkan secara berbeda.
Untuk menggunakan contoh sederhana, saya memiliki penghitung yang perlu meringkas alamat IP unik per halaman yang dikunjungi di situs. Yang pada dasarnya adalah pengelompokan oleh pagename dan kemudian oleh IP. Saya menyelesaikannya dengan kombinasi DISTINCT dan GROUP BY.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Jika Anda lebih suka (saya perlu menerapkan ini) grup dengan dua kolom secara bersamaan, saya baru saja melihat poin ini:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2
. Hasilnya biasanya akan terlihat sama dengan jawaban ini, tetapi eksekusi internal sangat berbeda.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2
. Ini akan memberikan hasil yang salah dengan beberapa data. Katakan col1, col2
memiliki nilai: ('a_b', 'c')
di satu baris dan ('a', 'b_c')
di baris lain. Jawaban yang salah ini, dengan GROUP BY CONCAT akan mengagregasi dua baris dalam satu. Jawaban yang benar tidak akan.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;