Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Membuang Ralat 'tidak dalam KUMPULAN OLEH'?

Mengapa MySQL Membuang Ralat 'tidak dalam KUMPULAN OLEH'?

Susan Sarandon
Susan Sarandonasal
2024-12-05 12:15:13329semak imbas

Why Does MySQL Throw an

MySQL "tiada dalam GROUP BY" Ralat: Penjelasan Komprehensif

Apabila menjalankan pertanyaan MySQL yang menggabungkan SELECT COUNT dan SELECT dengan GROUP BY, ia adalah mungkin untuk menghadapi percanggahan dalam bilangan keputusan. Sebab di sebalik ini selalunya adalah mesej ralat yang terkenal, "'field_name' tiada dalam GROUP BY".

Untuk memahami ralat, mari kita pecahkan isu:

MySQL dan GROUP BY

KUMPULAN OLEH kumpulan baris bersama-sama berdasarkan nilai satu atau lebih lajur yang ditentukan. Dalam kes kami, pertanyaan dengan GROUP BY mempunyai klausa seperti nama GROUP BY. Ini bermakna hanya baris dengan nilai nama unik akan dikumpulkan.

SQL92 lwn. SQL99 lwn MySQL

SQL92 pada asalnya memerlukan semua lajur dalam klausa SELECT untuk turut berada dalam klausa GROUP BY. Walau bagaimanapun, SQL99 melonggarkan sekatan ini, membenarkan lajur yang bergantung pada fungsi GROUP BY lajur untuk dimasukkan ke dalam klausa SELECT.

MySQL, secara lalai, membenarkan "kumpulan separa oleh", bermakna ia membenarkan lajur dalam SELECT klausa yang tidak jelas dalam klausa GROUP BY. Walau bagaimanapun, ini boleh membawa kepada keputusan yang tidak menentukan.

Penyelesaian

Untuk menyelesaikan isu, pastikan semua lajur dalam klausa SELECT adalah sama ada sebahagian daripada klausa GROUP BY atau bergantung secara fungsi pada ia. Dalam contoh kami, jenis, bahasa dan kod perlu ditambahkan pada klausa GROUP BY:

SELECT `name`, `type`, `language`, `code` 
FROM `users` 
WHERE `verified` = '1' 
GROUP BY `name`, `type`, `language`, `code` 
ORDER BY `count` DESC LIMIT 0, 25

Kumpulan Penuh Oleh lwn. Kumpulan Separa Oleh

MySQL juga menawarkan tetapan, @ @sql_mode, yang boleh ditetapkan untuk menguatkuasakan kumpulan penuh oleh:

set @@sql_mode='ONLY_FULL_GROUP_BY';

Dengan tetapan ini, sebarang pertanyaan yang tidak mempunyai kumpulan penuh oleh akan mengakibatkan ralat.

Atas ialah kandungan terperinci Mengapa MySQL Membuang Ralat 'tidak dalam KUMPULAN OLEH'?. 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