only_full_group_by =aktif memberi tahu mesin MySQL:Jangan terapkan GROUP BY
ketika Anda ragu tentang hasil apa yang akan ditampilkan dan membuat kesalahan. Hanya terapkan jika Group By
secara khusus memberitahu Anda apa yang harus dilakukan. yaitu ketika Group By
penuh dan sempurna!
only_full_group_by =nonaktif memberi tahu mesin MySQL:selalu terapkan GROUP BY
dan jika Anda ragu tentang hasil apa yang harus dipilih, pilih salah satu secara acak!
Anda tidak perlu mematikannya jika menggunakan GROUP BY
dengan benar!
Contoh:
Tabel:pengguna
id | name
----------------
1 ali
2 john
3 ali
Saat Anda menggunakan GROUP BY
pada name
kolom:
SELECT * FROM users GROUP BY name;
Ada dua kemungkinan hasil:
1 ali
2 john
ATAU
2 john
3 ali
MYSQL tidak tahu hasil apa yang harus dipilih! Karena ada id
yang berbeda s tetapi keduanya memiliki name=ali
.
Solusi1:
hanya memilih name
bidang:
SELECT name FROM users GROUP BY name;
hasil:
ali
john
Ini adalah solusi sempurna. menghapus kolom yang membuat GROUP BY
bingung. Ini berarti Anda tahu apa yang Anda lakukan. Biasanya, Anda tidak memerlukan
kolom tersebut, tetapi jika Anda membutuhkannya, buka Solution3 !
Solusi2:
Menonaktifkan only_full_group_by
. MYSQL akan memilih salah satu dari dua kemungkinan hasil RANDOM !! (Tidak apa-apa jika Anda tidak terlalu peduli apa id
itu akan memilih, tetapi ingat untuk mengaktifkannya segera setelah kueri Anda untuk mencegah perilaku tak terduga di groupBys mendatang)
Solusi3
Gunakan Aggregate
berfungsi seperti MIN()
, MAX()
untuk membantu MYSQL memutuskan apa yang harus dipilih.
Misalnya:
SELECT MAX(id), name FROM users GROUP BY name;
hasil:
2 john
3 ali
Ini akan memilih ali
baris yang memiliki maksimum id
.