Apabila membuat pertanyaan pangkalan data, adalah perkara biasa untuk menggunakan fungsi agregat seperti AVG() untuk mengira statistik ringkasan atau data kumpulan. Walau bagaimanapun, terdapat peraturan khusus yang mengawal penggunaan fungsi agregat, yang kadangkala boleh membawa kepada ralat.
Satu ralat biasa ialah "ERROR 1111 (HY000 ): Penggunaan fungsi kumpulan tidak sah," yang berlaku apabila fungsi agregat digunakan secara tidak betul dalam WHERE klausa. Mari kita pertimbangkan contoh untuk menggambarkan isu itu.
Masalah: Diberi jadual "kakitangan" dengan atribut berikut: ec, nama, kod, dob dan gaji, tulis pertanyaan untuk disenaraikan kakitangan yang berpendapatan lebih daripada gaji purata.
Salah Penyelesaian:
select * from staff where salary > avg(salary);
Dalam penyelesaian yang salah ini, fungsi agregat AVG() diletakkan dalam klausa WHERE, yang tidak dibenarkan oleh sintaks SQL.
Untuk menyelesaikan isu ini, terdapat dua pilihan:
1. Menggunakan Subkueri dalam Klausa WHERE:
select * from staff where salary > (select avg(salary) from staff)
Pertanyaan ini mengira purata gaji sebagai subkueri dan kemudian membandingkannya dengan gaji setiap pekerja dalam pertanyaan luar.
2. Menggunakan Klausa HAVING untuk Pengumpulan dan Penapisan:
select deptid, COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
Pertanyaan ini menggunakan klausa HAVING untuk menentukan syarat untuk memilih kumpulan dengan sifat tertentu (dalam kes ini, jabatan yang mempunyai lebih daripada dua pekerja ).
Adalah penting untuk diingat bahawa fungsi agregat hanya boleh digunakan dalam lokasi berikut dalam pertanyaan SQL:
Mengelakkan penyalahgunaan fungsi agregat memastikan kesahihan dan kecekapan pertanyaan SQL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Fungsi Agregat Seperti AVG() dengan betul dalam Klausa SQL WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!