출처
문제
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
문제에 대한 해석
-- 조건: 2022년 1월 판매
-- 출력 : 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES)
-- 정렬: 저자 ID를 오름차순, 카테고리를 내림차순
풀이(MYSQL)
with temp as (
select b.author_id, b.category, sum(b.price*bs.sales) as sales
from book b join book_sales bs
on b.book_id = bs.book_id
where date_format(bs.sales_date,'%Y-%m') = '2022-01'
group by b.author_id, b.category
)
select a.author_id, a.author_name, t.category, t.sales
from temp t join author a
on t.author_id = a.author_id
order by a.author_id, t.category desc
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- WITH 절: temp
- FROM 절: book 테이블과 book_sales테이블을 book_id를 기준으로 inner join
- WHERE 절: date_format을 통해 sales_date의 '%Y-%m'가 '2022-01'와 동일한 경우 필터링
- GROUP BY 절: author_id와 b.category을 통해 그룹화
- SELECT 절: author_id별 b.category별 (price*bs.sales)의 합을 계산하여 sales컬럼에 조회
- FROM 절: temp테이블과 author테이블을 author_id기준으로 inner join
- SELECT 절: author_id, author_name, category, sales 조회
- ORDER BY 절: author_id 오름차순 category 내림차순
다른사람 풀이
SELECT B.AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(SALES*PRICE) AS TOTAL_SALES
FROM BOOK_SALES S JOIN BOOK B ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE SALES_DATE LIKE ('2022-01%')
GROUP BY B.AUTHOR_ID, AUTHOR_NAME, CATEGORY
ORDER BY AUTHOR_ID ASC, CATEGORY DESC
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.01.30 |
---|---|
[문제풀이] 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.01.30 |
[문제풀이] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.01.29 |
[문제풀이] 주문량이 많은 아이스크림들 조회하기 (1) | 2024.01.29 |
[문제풀이] 우유와 요거트가 담긴 장바구니 (0) | 2024.01.26 |