Masalah:
Anda perlu menemukan baris di mana grup memiliki jumlah nilai dalam satu kolom kurang dari nilai yang diberikan.
Contoh:
Basis data kami memiliki tabel bernama company
dengan data pada kolom berikut:id
, department
, first_name
, last_name
, dan salary
.
id | departemen | nama_depan | nama_belakang | gaji |
---|---|---|---|---|
1 | pemasaran | Lora | Coklat | 2300 |
2 | keuangan | John | Jackson | 3200 |
3 | pemasaran | Michael | Thomson | 1270 |
4 | produksi | Tony | Miller | 6500 |
5 | produksi | Sally | Hijau | 2500 |
6 | keuangan | Olivier | Hitam | 3450 |
7 | produksi | Jeniffer | Michelin | 2800 |
8 | pemasaran | Jeremy | Lorson | 3600 |
9 | pemasaran | Louis | Smith | 4200 |
Mari kita cari nama departemen yang memiliki jumlah gaji karyawan kurang dari 7000.
Solusi:
SELECT department, SUM(salary) FROM company GROUP BY department HAVING SUM(salary)<7000;
Ini hasilnya:
departemen | jumlah |
---|---|
keuangan | 6550 |
Diskusi:
Untuk memfilter record menggunakan fungsi agregat (fungsi SUM dari sebelumnya), gunakan klausa HAVING. Untuk menghitung jumlah nilai untuk setiap grup baris, gunakan fungsi SUM agregasi. Dalam kueri ini, departemen kolom dihitung dengan jumlah semua gaji karyawannya sebagai grup (hitung dengan fungsi SUM dengan kolom gaji sebagai argumen). Karena Anda menghitung nilai untuk setiap grup baris (kami mengelompokkan baris menurut nama departemen), kueri memiliki klausa GROUP BY dengan nama kolom untuk mengelompokkan baris (dalam contoh kami, GROUP BY department
). Langkah terakhir adalah menggunakan fungsi agregat dalam klausa HAVING. Ingat, HAVING harus diletakkan setelah klausa GROUP BY. HAVING berisi kondisi yang membandingkan nilai yang dikembalikan oleh fungsi agregat dengan nilai yang diberikan. Dari atas, itu adalah jumlah gaji dengan nilai kurang dari 7000 (SUM(salary)<7000
). Di sini, kami memverifikasi jumlah gaji di setiap departemen lebih rendah dari 7000. Kueri yang ditampilkan hanya satu departemen, keuangan, dengan gaji 6550.