집계 쿼리를 쓰다 보면
HAVING AVG(...) >= 특정 값 같은 조건은 익숙하다.
그런데 이번에 쿼리를 짜면서
HAVING 안에서 다시 SELECT를 써서,
집계 결과끼리 비교할 수 있다는 걸 처음 제대로 인식했다.
조건을 문장으로 쓰면 대략 이런 구조였다.
어떤 그룹의 평균 값이
다른 그룹(또는 전체)의 평균 값 이상일 것
여기서 중요한 점은
비교 대상이 고정된 숫자가 아니라
다른 집계 결과라는 점이다.
처음에는 이런 생각이 들었다.
그런데 막상 정리해보니
HAVING 안에서 바로 서브쿼리를 써도 된다는 걸 깨달았다.
SELECT
category
FROM data_table
GROUP BY category
HAVING AVG(metric) >= (
SELECT AVG(metric)
FROM data_table
);
구조를 보면 단순하다.
별도의 CTE나 임시 테이블 없이도
한 쿼리 안에서 해결할 수 있다.
비교 기준이 “전체”가 아니라
특정 조건을 만족하는 집단일 경우에도
형태는 같다.
HAVING AVG(metric) >= (
SELECT AVG(metric)
FROM data_table
WHERE group_type = 'A'
)
기준만 서브쿼리에서 바꿔주면 된다.
이제는 이런 문장이 보이면
이 패턴이 바로 떠오를 것 같다.
👉 집계 결과 vs 집계 결과 비교