[코딩테스트] 36. 저자 별 카테고리 별 매출액 집계하기

윤설안's avatar
Apr 24, 2025
[코딩테스트] 36. 저자 별 카테고리 별 매출액 집계하기

테이블 index

📌

BOOK

Column name
Type
Nullable
Description
BOOK_ID
INTEGER
FALSE
도서 ID
CATEGORY
VARCHAR(N)
FALSE
카테고리 (경제, 인문, 소설, 생활, 기술)
AUTHOR_ID
INTEGER
FALSE
저자 ID
PRICE
INTEGER
FALSE
판매가 (원)
PUBLISHED_DATE
DATE
FALSE
출판일

AUTHOR 

Column name
Type
Nullable
Description
AUTHOR_ID
INTEGER
FALSE
저자 ID
AUTHOR_NAME
VARCHAR(N)
FALSE
저자명

BOOK_SALES 

Column name
Type
Nullable
Description
BOOK_ID
INTEGER
FALSE
도서 ID
SALES_DATE
DATE
FALSE
판매일
SALES
INTEGER
FALSE
판매량

문제

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

예시

notion image
notion image

풀이

❗
모든 테이블의 컬럼을 연결해서 조회 해야하기 때문에 우선 JOIN을 모두 해주었다.
SELECT * FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
2022년 01월에 도서 판매량만 필요하기 때문에 where문에 YEAR(해당년도만), MONTH(해당 월만)을 이용하여 조건을 걸어주었다
SELECT * FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
TOTAL_SALES를 출력하기 위해서는 sum함수를 사용해야함으로 group by를 해야한다. 그룹으로 묶어야 할 column은 author_id, category이다. 적는 순서에 따라 그룹이 먼저 묶이기 때문에 조심하여야한다.
SELECT A.AUTHOR_ID, B.AUTHOR_NAME,A.CATEGORY FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
그룹으로 묶었음으로 sum함수가 사용 가능하다. 하지만 출판 일에 따른 가격이 다르기 때문에 가권수 * 가격 후 같은 카테고리의 책을 sum함수로 더해주면 된다.
SELECT *, sum(a.PRICE * c.SALES) TOTAL_SALES FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1 group by b.author_id, a.category
이후 내가 필요한 컬럼만 출력 후 정렬을 해주었다.
SELECT a.AUTHOR_ID, b.AUTHOR_NAME, a.category, sum(a.PRICE * c.SALES) TOTAL_SALES FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1 group by b.author_id, a.category order by b.author_id, a.category desc
notion image
notion image
Share article