Ralat MySQL: "Penggunaan fungsi kumpulan tidak sah" punca dan penyelesaian
Dalam pertanyaan MySQL yang diberikan, ralat "Penggunaan fungsi kumpulan tidak sah" disebabkan oleh penggunaan fungsi COUNT dalam klausa WHERE. Klausa WHERE menapis baris sebelum mengumpulkan, menyebabkan ralat.
Gunakan klausa HAVING untuk menyelesaikan masalah
Untuk menyelesaikan isu ini, gantikan klausa WHERE dengan klausa HAVING. Klausa HAVING menapis kumpulan selepas kumpulan. Dalam contoh ini, klausa HAVING harus menyemak kiraan ID pembekal (sid) untuk memastikan ia lebih besar daripada atau sama dengan 2.
Berikut ialah subkueri yang diperbetulkan:
<code class="language-sql">( SELECT c2.pid FROM Catalog AS c2 WHERE c2.pid = c1.pid HAVING COUNT(c2.sid) >= 2 )</code>
Lengkapkan pertanyaan dengan klausa HAVING
Menggunakan subkueri yang dikemas kini, pertanyaan lengkap menjadi:
<code class="language-sql">SELECT c1.pid -- 选择 pid FROM Catalog AS c1 -- 来自 Catalog 表 WHERE c1.pid IN (SELECT c2.pid -- 其中 pid 在以下集合中: FROM Catalog AS c2 -- pids WHERE c2.pid = c1.pid HAVING COUNT(c2.sid) >= 2 -- 至少有两个对应的 sids );</code>
Pertanyaan ini akan mengembalikan pid bahagian yang dibekalkan oleh sekurang-kurangnya dua pembekal berbeza.
Atas ialah kandungan terperinci Mengapa MySQL Membuang 'Penggunaan fungsi kumpulan tidak sah' dan Bagaimana Membetulkannya Menggunakan HAVING?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!