코딩테스트연습(SQL)
저자 별 카테고리 별 매출액 집계하기 / 프로그래머스, SQL, MySQL
LearnerToRunner
2023. 3. 26. 18:10
문제
source: 프로그래머스
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가
) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
제출답안(MySQL)
WITH
sales_jan2022 AS
(SELECT book_id, SUM(sales) AS qty_jan2022
FROM book_sales
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-01'
GROUP BY book_id),
ls_book_n_author AS
(SELECT
b.author_id,
author_name,
category,
book_id,
price
FROM
book AS b
LEFT JOIN author AS a on b.author_id = a.author_id
)
SELECT
ba.author_id,
author_name,
category,
IFNULL(SUM(price*qty_jan2022), 0) AS total_sales
FROM
ls_book_n_author AS ba
LEFT JOIN sales_jan2022 AS s_jan ON ba.book_id = s_jan.book_id
GROUP BY
ba.author_id, author_name, category
ORDER BY
author_id, category DESC
풀이(MySQL)
더보기
2022년 1월 세일즈 데이터 CTE
WITH
sales_jan2022 AS
(SELECT book_id, SUM(sales) AS qty_jan2022
FROM book_sales
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-01'
GROUP BY book_id)
Author_id 와 author_name 데이터 CTE
ls_book_n_author AS
(SELECT
b.author_id,
author_name,
category,
book_id,
price
FROM
book AS b
LEFT JOIN author AS a on b.author_id = a.author_id
)
author/book 테이블과 세일즈 테이블을 결합 후 저자, 저자 이름, 카테고리별 그룹화
SELECT
ba.author_id,
author_name,
category,
IFNULL(SUM(price*qty_jan2022), 0) AS total_sales
FROM
ls_book_n_author AS ba
LEFT JOIN sales_jan2022 AS s_jan ON ba.book_id = s_jan.book_id
GROUP BY
ba.author_id, author_name, category
ORDER BY
author_id, category DESC
>> 세일즈가 없는 책/저자가 있는 경우에 대비하여 IFNULL로 예외처리
문제 바로가기(MySQL)
728x90