Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan Fungsi Agregat Seperti AVG() dengan betul dalam Klausa SQL WHERE?

Bagaimanakah Saya Boleh Menggunakan Fungsi Agregat Seperti AVG() dengan betul dalam Klausa SQL WHERE?

DDD
DDDasal
2024-12-19 14:58:14524semak imbas

How Can I Correctly Use Aggregate Functions Like AVG() in SQL WHERE Clauses?

Menggunakan Fungsi Agregat dalam Pertanyaan SQL

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.

Ralat 1111: Penggunaan Fungsi Kumpulan Tidak Sah

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.

Penyelesaian Betul

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 ).

Memahami Peraturan

Adalah penting untuk diingat bahawa fungsi agregat hanya boleh digunakan dalam lokasi berikut dalam pertanyaan SQL:

  • PILIH senarai: Kira statistik ringkasan atau kira nilai.
  • KUMPULAN MENGIKUT klausa: Data kumpulan dan laksanakan pengiraan agregat.
  • MEMILIH klausa: Nyatakan syarat untuk memilih kumpulan berdasarkan hasil agregat.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn