[코딩테스트] 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를 해야한다. 그룹으로 묶어야 할 columnauthor_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

YunSeolAn