Apakah mungkin untuk GROUP BYlebih dari satu kolom dalam SELECTpermintaan MySQL ? Sebagai contoh:
GROUP BY fV.tier_id AND 'f.form_template_id'
Apakah mungkin untuk GROUP BYlebih dari satu kolom dalam SELECTpermintaan 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 BYberlaku col1+col2. eg col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2dan berlari GROUP BY col1,col2akan kembali 1,1|1,3|2,2berlawanan dengan yang 1,1|2,2disarankan. Sedangkan GROUP BY col2, col1akan 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,2meskipun 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
SUMmenggunakan dengan GROUP BY. Jika GROUP BYhanya dengan satu kolom, maka SUMs semua nilai masing-masing berbeda (berbeda) nilai kolom sqlfiddle.com/#!9/1cbde2/2 . Jika GROUP BYdua kolom. Kemudian mysql pada pemeriksaan pertama jika untuk nilai kolom pertama ada nilai yang berbeda di kolom kedua. Jika ya, maka mysql SUMmasing-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, col2memiliki 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 ;