Menyelesaikan ralat "Penggunaan fungsi kumpulan tidak sah" MySQL
Dalam MySQL, apabila menemui mesej ralat "Penggunaan fungsi kumpulan tidak sah", adalah penting untuk memahami perbezaan antara klausa WHERE dan HAVING.
Soalan:
Pertanyaan anda mendapatkan semula ID bahagian (pid) yang disediakan oleh sekurang-kurangnya dua pembekal. Walau bagaimanapun, anda menerima ralat berikut:
<code>1111 - Invalid use of group function</code>
Sebab:
Ralat ini berpunca daripada penggunaan klausa WHERE yang salah dalam subkueri. Anda cuba menapis baris menggunakan klausa WHERE sebelum mengumpulkan dan mengagregatkannya, yang tidak dijangka kelakuan.
Penyelesaian:
Penyelesaian adalah menggantikan klausa WHERE dengan klausa HAVING. HAVING berjalan selepas MySQL telah mengumpulkan baris dan mengira agregat, membolehkan anda menapis hasil berdasarkan agregat ini.
Tulis semula subkueri:
Ganti klausa WHERE dalam subkueri dengan klausa HAVING:
<code>( -- pid属于以下集合: SELECT c2.pid -- pids集合 FROM Catalog AS c2 -- 来自catalog表 WHERE c2.pid = c1.pid HAVING COUNT(c2.sid) >= 2)</code>
Arahan:
Subkueri yang diubah suai ini akan menapis baris dengan betul selepas dikumpulkan mengikut pid dan mengira ID pembekal (sid) berbeza yang dikaitkan dengan setiap pid. Klausa HAVING memastikan bahawa hanya baris dengan kiraan sekurang-kurangnya 2 dipilih.
Dengan menggunakan klausa HAVING dengan sewajarnya, anda boleh menyelesaikan ralat "Penggunaan fungsi kumpulan tidak sah" dan mendapatkan hasil yang anda inginkan.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Penggunaan Fungsi Kumpulan Tidak Sah' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!