having 은 group by 와 한 셋트로 사용되며
그룹한 데이터들의 조건을 의미한다.
예시 ) books 에서 년도별로 stock_quantity 의 평균이 70보다 큰 데이터의 released_year와 평균 stock_quantity 값을 보여주세요.
select released_year,avg(stock_quantity) as average
from books
group by released_year
having average >= 70;
먼저 정답은 위와 같으나 정답에 접근하는 방법을 알아보자.
# 1. 년도별로 해결하기.
select *
from books
group by released_year
년도를 해당하는 컬럼은 released_year 이기 때문에 먼저 그룹으로 묶는다. (왜 묶냐면 중복값이 있기 때문이다.)
# 2 . group by 로 묶인 데이터의 평균값이 70 큰 데이터 해결하기
select *
group by released_year
having avg(stock_quantity)>= 70
having 은 그룹의 컬럼 을 써야하기 때문에 함수가 오는 것도 가능합니다.
where 조건과의 차이는 where 는 함수를 사용할 수 없고 일반 조건만 가능하지만
having은 그룹 컬럼의 관한 함수를 이용할 수있으나 다른 일반조건은 불가능합니다.
3. released_year 와 평균값 보여주기
select released_year,avg(stock_quantity) as average
from books
group by released_year
having avg(stock_quantity) >= 70;
'개발 > SQL' 카테고리의 다른 글
MySQL - Join 을 위한 외래키(fk),참조 변경,삭제 방법 (0) | 2022.12.08 |
---|---|
MySQL - 새로운 컬럼을 만들어 조회하기 (if , case - end) (0) | 2022.12.07 |
MySQL - 날짜관련day,dayname,dayofweek,date_format,curdate, 업데이트 시간 (0) | 2022.12.07 |
MySQL - subquery (0) | 2022.12.07 |
MySQL - count , min , max , avg , sum (0) | 2022.12.07 |