Menyelesaikan masalah Ralat "Penggunaan fungsi kumpulan tidak sah" MySQL
Panduan ini menangani ralat biasa MySQL "Penggunaan fungsi kumpulan tidak sah," yang sering ditemui semasa menanyakan data yang melibatkan berbilang pembekal dan alat ganti. Matlamatnya adalah untuk mencari bahagian yang dibekalkan oleh sekurang-kurangnya dua pembekal yang berbeza.
Isu teras terletak pada penyalahgunaan klausa WHERE
apabila berurusan dengan fungsi agregat seperti COUNT()
dalam subkueri. WHERE
menapis baris individu sebelum pengumpulan, manakala HAVING
menapis kumpulan baris selepas pengagregatan. Memandangkan kita perlu menapis berdasarkan bilangan pembekal setiap bahagian (nilai agregat), HAVING
adalah penting.
Pendekatan yang betul melibatkan subkueri untuk mengenal pasti bahagian yang memenuhi kriteria (sekurang-kurangnya dua pembekal) dan kemudian menggunakan IN
untuk memilih bahagian tersebut daripada pertanyaan utama. Perubahan penting ialah menggantikan WHERE
dengan HAVING
dalam subkueri:
Struktur subkueri yang diperbetulkan kelihatan seperti ini:
<code class="language-sql">( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(DISTINCT c2.sid) >= 2 )</code>
Subkueri yang disemak ini menggunakan GROUP BY c2.pid
untuk mengumpulkan baris mengikut ID bahagian dan HAVING COUNT(DISTINCT c2.sid) >= 2
untuk menapis kumpulan ini, mengekalkan hanya kumpulan yang mempunyai dua atau lebih ID pembekal yang berbeza. Kata kunci DISTINCT
memastikan setiap pembekal dikira sekali sahaja, walaupun mereka membekalkan bahagian yang sama beberapa kali.
Ringkasnya, ingat untuk menggunakan HAVING
dengan fungsi agregat dalam subkueri untuk menapis kumpulan baris dengan betul berdasarkan nilai agregat dalam MySQL. Perbezaan ini adalah kunci untuk menyelesaikan ralat "Penggunaan fungsi kumpulan tidak sah" dan mendapatkan semula data yang dikehendaki dengan tepat.
Atas ialah kandungan terperinci Bagaimana Menggunakan Fungsi GROUP dengan betul dalam Subkueri MySQL untuk Mencari Bahagian yang Dibekalkan oleh Berbilang Pembekal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!