그룹 결과 제한하기

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

그룹화 후에는 어떻게 필터링할까요?

Oracle SQL 입문

WHERE의 한계

  • WHERE로는 그룹을 필터링할 수 없습니다.
    • WHERE 절에서는 그룹 함수를 사용할 수 없습니다.
Oracle SQL 입문

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
        ^
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 |
| ...         | ...    |
Oracle SQL 입문

HAVING으로 그룹 결과 제한하기

HAVING 절 흐름

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

Oracle SQL 입문

다른 예시

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 |
| ...           | ...  |
Oracle SQL 입문

가이드라인

  • SELECTHAVING에서 서로 다른 그룹 함수를 사용할 수 있습니다.

  • HAVING에는 항상 그룹 함수가 포함됩니다.

연산 순서:

  1. WHEREGROUP BY로 행을 필터링합니다.
  2. 그룹에 그룹 함수를 적용합니다.
  3. HAVING으로 그룹을 필터링하여 출력합니다.
Oracle SQL 입문

연습해 봅시다!

Oracle SQL 입문

Preparing Video For Download...