Oracle SQL 입문
Hadrien Lacroix
Content Developer
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 |
| ... | ... |
그룹화 후에는 어떻게 필터링할까요?
WHERE로는 그룹을 필터링할 수 없습니다.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
^
SELECT Composer, AVG(Milliseconds)
FROM Track
GROUP BY Composer
HAVING AVG(Milliseconds) > 200000
| composer | avg |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 391146 |
| R. Carless | 251585 |
| ... | ... |

SELECT Composer, MAX(Milliseconds)
FROM Track
GROUP BY Composer
HAVING MAX(Milliseconds) > 200000
| composer | max |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 907520 |
| R. Carless | 251585 |
| ... | ... |
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 |
| ... | ... |
SELECT와 HAVING에서 서로 다른 그룹 함수를 사용할 수 있습니다.
HAVING에는 항상 그룹 함수가 포함됩니다.
연산 순서:
WHERE와 GROUP BY로 행을 필터링합니다.HAVING으로 그룹을 필터링하여 출력합니다.Oracle SQL 입문