Mengatasi SELECT list is not in GROUP BY clause and contains nonaggregated column

Salah satu error yang sering terjadi ketika melakukan query GROUP BY adalah error contains nonaggregated column. Error ini sering terjadi ketika ketika kita melakukan query GROUP BY tetapi kolom yang di SELECT tidak masuk ke dalam list GROUP BY.

Error Database MySQL tersebut lengkapnya adalah sebagai berikut:

SELECT list is not in GROUP BY clause and contains nonaggregated column… which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by – Invalid query:

Cara Mengatasi Error SELECT list is not in GROUP BY

Untuk mengatasi error tersebut ada dua macam cara. Anda bisa memilih salah satu cara yang paling mudah dan paling memungkinkan. Simak tutorial ini lebih lanjut.

1. Mengubah SQL Mode ONLY FUL GROUP BY Menjadi Disable

Cara pertama adalah melakukan disable pada mode SQL: only_full_group_by

Cara ini hanya dapat anda lakukan jika anda adalah admin pada server yang anda gunakan. Hal ini karena biasanya untuk mengubah mode SQL membutuhkan akses admin.

Untuk mengubah mode SQL, anda bisa masuk ke dalam console MySQL, kemudian jalankan command berikut:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Setelah itu, anda bisa menjalankan query lagi, seharusnya sudah tidak error.

Perlu diingat bahwa cara ini hanya bersifat sementara. Ketika server MySQL tersebut restart, maka mode SQL akan kembali lagi seperti semula. Jika anda ingin mengubahnya secara permanen, maka anda harus mengedit konfigurasi MySQL pada file my.cnf

Anda bisa saja meminta tolong admin untuk mengubah mode SQL nya, tapi jika tidak memungkinkan, maka anda bisa menggunakan cara kedua.

2. Mengubah Query Agar Compatible dengan Mode ONLY_FULL_GROUP_BY

Cara kedua yang dapat anda lakukan adalah melakukan modifikasi query sehingga menjadi compatible dengan mode SQL yang berjalan saat ini.

Contohnya, jika kode SQL Anda sebelumnya seperti ini dan menghasilkan error tersebut,

SELECT user_id, category_id, title, contents
FROM article
WHERE published=1
GROUP BY user_id;  

Maka, anda harus mengubahnya menjadi:

SELECT user_id, category_id, title, contents
FROM article
WHERE published=1
GROUP BY user_id, category_id;

Nah, mudah bukan! Memang terlihat mudah, tapi pada praktiknya query yang anda lakukan mungkin tidak sesimple contoh yang saya berikan.

Selamat mencoba!

Leave a Comment