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이 넘는 '가' 그룹만 정상적으로 표시