SELECT COUNT(*)
FROM 테이블
HAVING COUNT(*) > 1

SELECT SUM(CNT) AS result
FROM sql_test_a;
HAVING MAX(CNT) > 100
-- 결과 : 300
pencil의 CNT 값이 120으로 100이 넘기 때문에, 결과는 CNT들의 총합인 300을 반환
HAVING이 아닌 WHERE절을 사용할 경우 오류 발생
-- 오류 발생 쿼리
SELECT SUM(CNT) AS result
FROM sql_test_a;
WHERE MAX(CNT) > 100
| name | price |
|---|---|
| a | 10,000 |
| b | 4,000 |
| c | 7,000 |
| d | 6,000 |
| a | 6,000 |
| a | 7,000 |
SELECT
SUM(price)
FROM
table
HAVING
SUM(price) > 20000
;
| SUM(PRICE) |
|---|
| 40,000 |
→ 전체 합계가 2만이 넘기 때문에 정상적으로 조회가 됨
SELECT
MAX(price) AS max_p
, AVG(price) AS avg_p
, COUNT(name) AS cnt_p
, COUNT(DISTINCT name) AS cnt_dist_p
FROM
table
HAVING
SUM(price) > 20000
;
| max_p | avg_p | cnt_p | cnt_dist_p |
|---|---|---|---|
| 10,000 | 6,666.66… | 6 | 4 |
SELECT
name
FROM
table
HAVING
SUM(price) > 20000
;
# 아래와 같은 출력
# SQL Error [937][42000]: ORA-00937: 단일 그룹의 합수가 아닙니다
SELECT
SUM(price)
FROM
table
WHERE
price > 5000
HAVING
SUM(price) > 20000
;
| SUM(PRICE) |
|---|
| 36,000 |
→ WHERE 조건문으로 price가 5000 이상인 row에 대해서만 sum을 하도록 했기 때문에 price가 4000인 row 가 집계에서 제외됨
SELECT
SUM(price)
FROM
table
WHERE
name <> '가'
HAVING
SUM(price) > 20000
;
| SUM(PRICE) |
|---|
→ name이 '가' 가 아닌 행들만 sum(price)하면 20000이 넘지 않아서 표시되지 않음
SELECT
name
, SUM(price)
FROM
table
WHERE
price > 5000
GROUP BY
name
HAVING
SUM(price) > 20000
;
| NAME | SUM(PRICE) |
|---|---|
| a | 23,000 |
→ 테이블에서 name으로 group by를 했을 시 20000이 넘는 '가' 그룹만 정상적으로 표시