Cara Mengatasi MySQL only_full_group_by
Memahami penyebab error only_full_group_by dan cara memperbaiki query agar tetap valid tanpa mematikan mode ketat MySQL.
Error only_full_group_by biasanya muncul setelah pindah server atau naik versi MySQL. Pesannya terlihat menakutkan, padahal MySQL hanya sedang menolak query yang ambigu.
Penyebabnya
Query melakukan GROUP BY namun memilih kolom yang tidak ada di dalam GROUP BY dan tidak dibungkus fungsi agregat. MySQL tidak dapat menentukan baris mana yang harus dipakai.
SELECT unit_id, name, COUNT(*)
FROM employees
GROUP BY unit_id;
Perbaikan yang Disarankan
Tambahkan kolom tersebut ke GROUP BY, atau bungkus dengan fungsi agregat bila memang hanya butuh satu nilai perwakilan.
SELECT unit_id, MAX(name) AS name, COUNT(*) AS total
FROM employees
GROUP BY unit_id;
Jika Butuh Baris Utuh
Ketika yang dibutuhkan adalah baris lengkap per grup, gunakan subquery atau join terhadap hasil agregasi. Pendekatan ini lebih akurat dibanding mengandalkan nilai acak.
Mematikan Mode Ketat
Mengubah sql_mode memang menghilangkan error, tetapi sebaiknya jadi jalan terakhir. Mode ketat justru membantu menemukan query yang hasilnya tidak dapat diandalkan.
Pada Laravel, perilaku ini dapat diatur lewat opsi strict pada konfigurasi koneksi database.