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
Lepaskan: 2024-12-20 04:56:18
asal
425 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

Pertanyaan ini mungkin mengembalikan nilai y rawak untuk setiap kumpulan x, seperti yang ditunjukkan dalam output berikut:

+------+------+
| x    | y    |
+------+------+
|    1 |    1 |
+------+------+
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan