Restricționarea rezultatelor grupate

Introducere în Oracle SQL

Hadrien Lacroix

Content Developer

Revenind la exemplul nostru

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

Dar filtrarea după grupare?

Introducere în Oracle SQL

Limitele lui WHERE

  • WHERE nu poate filtra grupuri
    • Funcțiile de grup nu pot fi utilizate în clauzele WHERE
Introducere în Oracle SQL

Exemplu cu limitele lui 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
        ^
Introducere în 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 |
| ...         | ...    |
Introducere în Oracle SQL

Restricționarea grupurilor cu HAVING

Fluxul clauzei HAVING

Introducere în 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 |
| ...         | ...    |

Introducere în Oracle SQL

Alt exemplu

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 |
| ...           | ...  |
Introducere în Oracle SQL

Reguli

  • În SELECT și HAVING pot fi utilizate funcții de grup diferite

  • HAVING conține întotdeauna o funcție de grup

Ordinea operațiilor:

  1. Rândurile sunt filtrate prin WHERE și GROUP BY
  2. Funcția de grup se aplică grupurilor
  3. Grupurile sunt filtrate prin HAVING, apoi afișate
Introducere în Oracle SQL

Să exersăm!

Introducere în Oracle SQL

Preparing Video For Download...