DATABASE/MySQL Workbench

MySQL Workbench : group by 에서 having을 사용하는 방법

신강희 2024. 5. 15. 17:14
728x90

< MySQL group by 에서 having을 사용하는 방법 >

- 이전 생성한 스키마(DB)와 테이블로 이어서 진행

- 참고 : https://sorktjrrb.tistory.com/105

 

MySQL Workbench : 문자열 처리 함수들 (concat, concat_ws, substring)

# 문자열 처리 함수 학습을 위해 books 라는 새로운 테이블 생성ㄴ 혹시 테이블을 수정하고 싶으면 좌측 목록에서 체크된 아이콘을 누르면 수정 가능! # yhdb 를 사용하였으므로, 해당 db 사용 문구

sorktjrrb.tistory.com

 

# ~별로 묶어서 ... 하자 : group by 키워드

-- ~별로 묶어서 ... 하자 : group by 키워드
-- author_lname 별로, 몇권의 책을 썼는지,
-- author_lname과 책의 권수를 보여주세요.
select author_lname , count(author_lname) as book_cnt
from books
group by author_lname;

 

-- 년도별로 각각 몇권의 책이 출간되었는지,
-- 년도와 책의수를 보여주세요.
select released_year , count(released_year) as book_cnt
from books
group by released_year
order by released_year;

 

# group by 와 정렬 까지

-- 8) 년도별 책의 갯수와 평균 페이지수를 나타내고, 년도별로 정렬해라.

select released_year as year, 
	count(title) as '# books', 
	avg(pages) as 'avg pages'
from books
group by released_year
order by year;

 

# 좀더 실무적인 코딩 groub by의 조건문 having 사용 방법!

-- 좀더 실무적으로!!
-- 년도별 stock_quantity 의 평균값이 70보다 큰 책들의
-- 년도와 평균값을 보여주세요.
-- 조건문을 사용하기 위해선 where를 사용하여야 하지만 group by 뒤에는 where 사용이 불가능
-- 이렇게 필요로의해 group by 뒤에 조건문을 사용하여야 할때는 having을 사용하여야 한다.

select released_year, avg( stock_quantity ) as avg_stock
from books
group by released_year having avg_stock > 70;

 

-- 출판년도가 2000년 이상인 데이터에서
-- 년도별 stock_quantity 의 평균값이 70보다 큰 책들의
-- 년도와 평균값을 보여주세요.

select released_year, avg(stock_quantity) as avg_stock
from books
where released_year >= 2000
group by released_year having avg_stock > 70 ;

 

-- 출판년도가 2000년 이상인 데이터에서
-- 년도별 stock_quantity 의 평균값이 70보다 큰 책들의
-- 년도와 평균값을 보여주되, 평균값이 큰것부터 보여주세요.
select released_year, avg(stock_quantity) as avg_stock
from books
where released_year >= 2000
group by released_year having avg_stock > 70 
order by avg_stock desc;

 

# having과 정렬까지

-- 출판년도가 2000년 이상인 데이터에서
-- 년도별 stock_quantity 의 평균값이 70보다 큰 책들의
-- 년도와 평균값을 보여주되, 평균값이 큰것부터 보여주세요.

select released_year, avg(stock_quantity) as avg_stock
from books
where released_year >= 2000
group by released_year having avg_stock > 70 
order by avg_stock desc;

 

다음 게시글로 계속!

반응형