MySQL "tiada dalam GROUP BY" Ralat
Ralat ini timbul apabila anda memasukkan lajur bukan agregat dalam klausa SELECT a pertanyaan dengan klausa GROUP BY yang tidak memenuhi keperluan kumpulan. Dalam kes ini, pertanyaan:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
mencetuskan ralat kerana jenis, bahasa dan kod tidak disertakan dalam GROUP BY. Untuk menyelesaikan masalah ini, anda perlu memasukkan semua lajur tidak teragregat ke dalam kumpulan mengikut keperluan:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
Kumpulan SQL Mengikut Keperluan
SQL92 menentukan bahawa setiap lajur dirujuk di luar fungsi pengagregatan dalam klausa SELECT mesti disertakan dalam klausa GROUP BY. Walau bagaimanapun, SQL99 melonggarkan keperluan ini untuk menyatakan bahawa lajur ini mestilah bergantung secara fungsi pada kumpulan mengikut klausa.
MySQL Group By Behavior
MySQL membenarkan kumpulan separa mengikut oleh lalai, yang boleh mengakibatkan keputusan bukan deterministik. Sebagai contoh, pertimbangkan pertanyaan berikut:
create table t (x int, y int); insert into t (x,y) values (1,1),(1,2),(1,3); select x,y from t group by x;
Pertanyaan ini mungkin mengembalikan nilai y rawak untuk setiap kumpulan x, seperti yang ditunjukkan dalam output berikut:
+------+------+ | x | y | +------+------+ | 1 | 1 | +------+------+
Mencegah Kumpulan Separa Oleh
Untuk mengelakkan tingkah laku tidak tentu ini, anda boleh menetapkan @@sql_mode kepada 'HANYA_KUMPULAN_PENUH_OLEH':
set @@sql_mode='ONLY_FULL_GROUP_BY'; select x,y from t group by x; ERROR 1055 (42000): 'test.t.y' isn't in GROUP BY
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'tidak ada dalam GROUP BY' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!