purata(gaji);" Gagal, dan Bagaimanakah Saya Boleh Mencari Kakitangan Berpendapat Melebihi Purata Dengan Betul? " /> purata(gaji);" Gagal, dan Bagaimana Saya Boleh Mendapatkan Kakitangan Berpendapatan Melebihi Purata? " />
Peperiksaan Mendalam "ERROR 1111 (HY000): Penggunaan Fungsi Kumpulan Tidak Sah"
Pertanyaan ini bertujuan untuk mengenal pasti ahli kakitangan yang berpendapatan lebih daripada gaji purata dalam jadual kakitangan yang mengandungi atribut seperti ec, nama, kod, dob, dan gaji yang disediakan penyelesaian:
select* from staff where salary > avg(salary);
gagal disebabkan penggunaan fungsi kumpulan yang tidak sah dalam klausa WHERE Fungsi agregat, seperti AVG, tidak boleh digunakan secara langsung dalam klausa WHERE melainkan ia terkandung dalam subkueri dalam HAVING. klausa atau senarai pilihan dan lajur yang diagregatkan ialah rujukan luar.
Betul Pendekatan:
Menggunakan Subkueri dalam Klausa WHERE:
select * from staff where salary > (select avg(salary) from staff)
Menggunakan Klausa HAVING:
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
Klausa HAVING membenarkan penapisan berdasarkan kumpulan atau nilai agregat, dan ia berkelakuan serupa dengan klausa WHERE dalam kes tanpa GROUP BY Dengan mengalihkan fungsi agregat ke klausa HAVING, pertanyaan mengenal pasti dengan betul kakitangan yang gajinya melebihi purata.
Atas ialah kandungan terperinci Mengapa Adakah 'pilih * daripada kakitangan di mana gaji > purata(gaji);' Gagal, dan Bagaimana Saya Boleh Mendapatkan Kakitangan Berpendapatan Melebihi Purata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!