Masalah:
Anda ingin menemukan grup baris di mana rata-rata nilai dalam kolom lebih tinggi atau lebih rendah dari nilai yang diberikan.
Contoh:
Basis data kami memiliki tabel bernama product
dengan data pada kolom berikut:id
, name
, grocery
dan price
.
id | nama | bahan makanan | harga |
---|---|---|---|
1 | susu | Toko Hijau | 2,34 |
2 | roti | Kelontong Clark | 3,56 |
3 | roti | Pasar Super | 4.15 |
4 | susu | Pasar Super | 1,80 |
5 | roti | Amanda Kelontong | 2.26 |
6 | susu | Kelontong Violet | 3,45 |
7 | susu | Kelontong Clark | 2.10 |
8 | roti | Kelontong Violet | 2,55 |
9 | susu | Amanda Kelontong | 1,95 |
Mari kita cari nama produk yang harga rata-rata setiap produk di antara bahan makanan lebih tinggi dari 3,00.
Solusi:
SELECT name, AVG(price) FROM product GROUP BY name HAVING AVG(price)>3.00;
Ini hasilnya:
nama | rata-rata |
---|---|
roti | 3.13 |
Diskusi:
Untuk memfilter record menggunakan fungsi agregat, gunakan klausa HAVING.
Di sini kami menghitung nilai agregat:harga rata-rata setiap produk. Satu dijual oleh lebih dari satu pedagang; oleh karena itu harga rata-rata dihitung untuk masing-masing (dalam contoh kami, SELECT name, AVG(price)
). Selain fungsi agregat, kita juga menggunakan nama kolom di SELECT, jadi kita harus menggunakan GROUP BY dengan nama kolom ini (GROUP BY name
).
Langkah terakhir adalah menggunakan fungsi agregat dalam klausa HAVING. Ingat bahwa HAVING harus diletakkan setelah klausa GROUP BY. Ini berisi kondisi yang membandingkan nilai yang dikembalikan oleh fungsi agregat dengan nilai yang diberikan. Di atas adalah harga rata-rata produk dengan nilai 3,00 (HAVING AVG(price)>3.00
). Dalam kueri ini, kami memeriksa apakah harga rata-rata setiap produk di semua bahan makanan lebih tinggi dari tiga. Kueri hanya menampilkan satu produk, roti, dengan harga rata-rata lebih tinggi dari tiga.