Membatasi hasil grup

Pengantar Oracle SQL

Hadrien Lacroix

Content Developer

Kembali ke contoh

SELECT Composer, AVG(Milliseconds)
FROM Track
WHERE UnitPrice = 0.99
GROUP BY Composer
| Composer        | AVG(Milliseconds) |
|-----------------|-------------------|
| Antonio Vivaldi | 199,086.0         |
| Pearl Jam       | 94,197.0          |
| Jimmy Page      | 474,888.3         |
| Carlos Santana  | 499,234.3         |
| ...             | ...               |

Bagaimana dengan memfilter setelah pengelompokan?

Pengantar Oracle SQL

Batasan WHERE

  • WHERE tidak bisa memfilter hasil grup
    • Fungsi grup tidak boleh dipakai di klausa WHERE
Pengantar Oracle SQL

Contoh batasan WHERE

SELECT Composer, AVG(Milliseconds)
FROM Track
GROUP BY Composer
WHERE AVG(Milliseconds) > 200000
syntax error at or near "WHERE"
LINE 4: WHERE AVG(Milliseconds) > 200000
        ^
Pengantar Oracle SQL

HAVING

SELECT Composer, AVG(Milliseconds)
FROM Track
GROUP BY Composer
HAVING AVG(Milliseconds) > 200000
| composer    | avg    |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 391146 |
| R. Carless  | 251585 |
| ...         | ...    |
Pengantar Oracle SQL

Membatasi hasil grup dengan HAVING

Alur klausa HAVING

Pengantar Oracle SQL

HAVING

SELECT Composer, MAX(Milliseconds)
FROM Track
GROUP BY Composer
HAVING MAX(Milliseconds) > 200000
| composer    | max    |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 907520 |
| R. Carless  | 251585 |
| ...         | ...    |

Pengantar Oracle SQL

Contoh lain

SELECT Composer, SUM(UnitPrice)
FROM Track
WHERE GenreId = 1
GROUP BY Composer
HAVING COUNT(*) > 4
| composer      | sum  |
|---------------|------|
| AC/DC         | 7.92 |
| Chris Cornell | 9.90 |
| Eddie Vedder  | 8.91 |
| ...           | ...  |
Pengantar Oracle SQL

Pedoman

  • Fungsi grup di SELECT dan HAVING bisa berbeda

  • HAVING selalu memakai fungsi grup

Urutan operasi:

  1. Baris difilter oleh WHERE lalu dikelompokkan (GROUP BY)
  2. Fungsi grup diterapkan ke tiap grup
  3. Grup difilter dengan HAVING, lalu ditampilkan
Pengantar Oracle SQL

Ayo berlatih!

Pengantar Oracle SQL

Preparing Video For Download...