하루에 하나씩 공부하기
저자 별 카테고리 별 매출액 집계하기-LV4 본문
- 문제
2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.
코딩테스트 연습 - 저자 별 카테고리 별 매출액 집계하기 | 프로그래머스 스쿨
- 키포인트
저자 한명의 같은 카테고리인데 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 생성도 안해도 됨.......허무하다.......
'SQL 코딩테스트 > LV4' 카테고리의 다른 글
취소되지 않은 진료 예약 조회하기-LV4 (0) | 2025.01.23 |
---|---|
주문량이 많은 아이스크림들 조회하기-LV4 (0) | 2025.01.22 |
자동차 대여 기록 별 대여 금액 구하기-LV4 (재도전) (0) | 2025.01.21 |
특정 기간 동안 대여 가능한 자동차들의 대여비용 구하기-LV4 (재도전) (1) | 2025.01.20 |
Front End 개발자 찾기-LV4 (0) | 2025.01.17 |