Rumah >pangkalan data >tutorial mysql >Mengapakah 'pilih* daripada kakitangan di mana gaji > purata(gaji)' Mengembalikan 'RALAT 1111 (HY000): Penggunaan Fungsi Kumpulan Tidak Sah'?
avg(gaji)" Kembalikan "ERROR 1111 (HY000): Penggunaan Fungsi Kumpulan Tidak Sah"? " /> avg(gaji)" Kembalikan "ERROR 1111 (HY000): Penggunaan Fungsi Kumpulan Tidak Sah"? " />
Percubaan untuk menyenaraikan kakitangan yang memperoleh gaji melebihi purata menggunakan pertanyaan "pilih* daripada kakitangan di mana gaji > avg(gaji)" mengembalikan "ERROR 1111 (HY000): Penggunaan fungsi kumpulan tidak sah." Isu ini timbul disebabkan oleh penggunaan fungsi agregat yang salah dalam klausa WHERE.
Fungsi agregat, seperti AVG() dalam kes ini, tidak boleh digunakan dalam klausa WHERE melainkan syarat tertentu dipenuhi Menurut piawaian SQL, agregat boleh muncul dalam klausa WHERE jika ia digunakan dalam subkueri dengan klausa HAVING atau senarai pilih. lajur agregat ialah rujukan luar.
Untuk menangani ralat, tulis semula pertanyaan menggunakan subquery dalam klausa WHERE:
select * from staff where salary > (select avg(salary) from staff)
Pertanyaan ini menggunakan subquery untuk mengira purata gaji, yang kemudiannya berbanding dengan gaji setiap kakitangan.
Sebagai alternatif, pertimbangkan untuk menggunakan klausa HAVING untuk menapis data agregat:
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
Klausa HAVING dalam pertanyaan ini mengehadkan keputusan kepada jabatan yang mempunyai lebih daripada dua kakitangan .
Atas ialah kandungan terperinci Mengapakah 'pilih* daripada kakitangan di mana gaji > purata(gaji)' Mengembalikan 'RALAT 1111 (HY000): Penggunaan Fungsi Kumpulan Tidak Sah'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!