Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

하루에 하나씩 공부하기

저자 별 카테고리 별 매출액 집계하기-LV4 본문

SQL 코딩테스트/LV4

저자 별 카테고리 별 매출액 집계하기-LV4

dltaexox 2025. 1. 22. 16:48

- 문제

2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.

 

코딩테스트 연습 - 저자 별 카테고리 별 매출액 집계하기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 키포인트

저자 한명의 같은 카테고리인데 BOOK_ID가 다른 경우는 어떻게 처리하지?

ex)

book_id category author_id
1 경제 홍길동
2 경제 홍길동

 

- 코드

WITH TOTAL AS(
SELECT BOOK_ID, SUM(SALES) AS SUM_SALES
FROM BOOK_SALES
WHERE SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY BOOK_ID)

SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.PRICE*T.SUM_SALES) AS TOTAL_SALES
FROM BOOK B JOIN AUTHOR A ON B.AUTHOR_ID=A.AUTHOR_ID JOIN TOTAL T ON B.BOOK_ID=T.BOOK_ID
GROUP BY A.AUTHOR_ID, B.CATEGORY
ORDER BY 1 ASC, 3 DESC;

 

먼저 TOTAL CTE 생성 후 BOOK_ID 별로 1월에 판매된 판매량 합산

이후 메인쿼리에서 테이블 조인 후 저자별, 카테고리별 그룹화 진행

위의 키포인트를 해결하기 위해 **SUM()** 함수 사용해 합산

 

SELECT A.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 YEAR(S.SALES_DATE) = 2022 AND MONTH(S.SALES_DATE) = 1
GROUP BY CATEGORY, AUTHOR_ID
ORDER BY A.AUTHOR_ID, CATEGORY DESC

 

다른 코드를 살펴보니 CTE 생성도 안해도 됨.......허무하다.......