Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat 'tidak ada dalam GROUP BY' MySQL?

Bagaimana untuk Menyelesaikan Ralat 'tidak ada dalam GROUP BY' MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-20 04:56:18397semak imbas

How to Resolve MySQL's

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn