group by
group by 명령어를 통해 특정 컬럼을 기준으로 그룹화 할 수 있다.
그룹화를 하면 조회된 데이터를 통계를 내기 위한 집계함수( avg, sum 등.. )를 사용하기에 용이해진다.
-- author_lname 별로 몇권의 책을 썼는지, 작가 이름과 책 권수를 가져오세요
select author_lname, count(title) as count
from books
group by author_lname;
-- author_lname과 author_fname 별로(작가의 풀네임별로)
-- 그 작가의 이름(풀네임)과 출간년도의 최소값을 보여주세요.
-- (각 작가별로, 최초 책 발간한 년도가 언제입니까?)
select concat(author_lname, ' ', author_fname) as full_name, min(released_year)
from books
group by author_lname, author_fname;
-- 각 작가별로, 작가 이름과 자신이 쓴 책의 페이지수의 합을 보여주세요.
select sum(pages), concat(author_fname, ' ', author_lname) as full_name
from books
group by author_fname, author_lname;
having
group by 절에서 조건을 주려면 where가 아닌, having 절을 사용해야 한다.
select 실행 순서를 보면, where 절이 group by 보다 먼저 실행되기 때문에,
group by에는 대응되는 having 절이 있다.
having은 group by 뒤에 작성하고 where절과 동일한 형식으로 조건을 작성한다.
-- 년도별 stock_quantity 의 평균값이 70보다 큰 책들의, 년도와 평균값을 가져오세요
select released_year, avg(stock_quantity) as average
from books
group by released_year having average > 70;
'MySQL' 카테고리의 다른 글
MySQL 날짜, 시간 처리하기 - date, time, datetime (0) | 2022.12.08 |
---|---|
MySQL - select 문의 여러 문법들 (0) | 2022.12.07 |
MySQL - 서브쿼리(SubQuery) (0) | 2022.12.07 |
MySQL - 집계함수 count(), min(), max(), sum(), avg() (0) | 2022.12.07 |
MySQL - 문자열 부분 일치 검색하기 like (0) | 2022.12.07 |