-- 년도별 stock_quantity의 평균값이 70보다 큰 책들의 데이터를 가져와서 년도와 평균값을 보여주세요.
SELECT released_year ,avg(stock_quantity) as avg_stock
FROM books b
group by released_year
where avg_stock >70 ;
group by로 가공한 데이터를 where로 입력하면 작동 하지 않는다... 문법상 오류!
Having 절이란?
- 그룹화된 결과 필터링: HAVING절은 GROUP BY로 그룹화된 결과 집합에 조건을 적용하여 필터링합니다.
- 집계 함수 사용: WHERE절과 달리 HAVING절에서는 집계 함수(SUM, COUNT, AVG 등)를 사용한 조건을 지정할 수 있습니다.
- 실행 순서: WHERE → GROUP BY → HAVING 순으로 실행됩니다. WHERE는 개별 행을 필터링하고, HAVING은 그룹화된 결과를 필터링합니다.
- 조건 지정: 비교 연산자(=, >, <), 논리 연산자(AND, OR), IN, LIKE 등을 사용하여 다양한 조건을 지정할 수 있습니다.
- GROUP BY와의 관계: HAVING절에서 사용되는 컬럼은 GROUP BY절에 포함된 컬럼이거나 집계 함수를 사용한 결과여야 합니다.
SELECT released_year ,avg(stock_quantity) as avg_stock
FROM books b
group by released_year
HAVING avg_stock >70;
group by로 가공된 avg_stock을 컬럼을 사용하여 조회 되었습니다.
-- 출간년도가 2000년 이상인 데이터에서
년도별 재고수량의 평균값이 70보다 큰 데이터의 년도와 평균값을 큰 값부터 정렬하여 보여주세요.

SELECT released_year ,avg(stock_quantity)as avg_stock | |
FROM books b | |
WHERE released_year >=2000 | 출간년도가 2000년 이상인 데이터에서 |
group by released_year | 년도별 |
having avg_stock > 70 | 재고평균값이 70 이상인 |
order by avg_stock DESC ; | 제일 큰 값부터 정렬 |
키워드 순서
일반적인 쿼리 구조는 SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY 순서를 따른다.