본문 바로가기
DB/문법

MySQL Having 키워드

by ssury94 2024. 11. 29.
 
 
 

-- 년도별 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 절이란?

  1. 그룹화된 결과 필터링: HAVING절은 GROUP BY로 그룹화된 결과 집합에 조건을 적용하여 필터링합니다.
  2. 집계 함수 사용: WHERE절과 달리 HAVING절에서는 집계 함수(SUM, COUNT, AVG 등)를 사용한 조건을 지정할 수 있습니다.
  3. 실행 순서: WHERE → GROUP BY → HAVING 순으로 실행됩니다. WHERE는 개별 행을 필터링하고, HAVING은 그룹화된 결과를 필터링합니다.
  4. 조건 지정: 비교 연산자(=, >, <), 논리 연산자(AND, OR), IN, LIKE 등을 사용하여 다양한 조건을 지정할 수 있습니다.
  5. 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 순서를 따른다.