[프로그래머스] 카테고리 별 도서 판매량 집계하기 - SQL

728x90

프로그래머스 SQL - 카테고리 별 도서 판매량 집계하기

문제 설명

다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 판매 정보(BOOK_SALES) 테이블입니다.

BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

 

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

BOOK_SALES 테이블은 각 도서의 날짜 별 판매량 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

 

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

문제

2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

 

문제해설

문제를 보며 차근차근 단서를 찾아보자

 

먼저 두 개의 테이블이 주어졌다는 점에서, 본 문제는 JOIN을 사용해야 된다는 가능성을 염두하자.

 

이어서, 본 문제는 DATE 타입 컬럼이 두 개나 존재한다. 추가로 문제에서 2022년 1월의 판매량 합산을 요구한다.

따라서 본 문제는 DATE 컬럼의 파싱을 해야 될 것이다.

 

또한, 문제에서 카테고리별 총 판매량을 구해달라고 요구했으므로, GROUP BY 연산이 필요할 것이다.

마지막으로 결과는 카테고리의 오름차순 이므로, ORDER BY 연산이 필요하다.

 

이제 결과 계산에 필요한 정보를 알아보자.

 

본 문제는 카테고리 별 총 판매량을 계산해야 한다.

카테고리 정보는 BOOK 테이블에 있으며, 판매량 정보는 BOOK_SALES 테이블에 있다.

따라서, 두 테이블을 JOIN 시켜야만 해결할 수 있다.

 

또한 2022년 1월 데이터만 추출해야 하지만, 본 문제의 날짜 컬럼은 2022-01-01로 포맷을 맞춰줘야 한다.

따라서 DATE_FORMAT 함수를 사용한다.

 

문제에서 제공된 컬럼은 %Y-%m-%d의 형태인데, 우리는 년도와 월만 알아내면 되므로,

%Y-%m 형태로 변환해준다.

 

JOIN해서 CATEGORY별로 GROUP BY를 하고, 그 때의 판매량, 즉 SALES 컬럼의 카테고리 별 합을 계산한다.

 

마지막으로,  카테고리 기준으로 오름차순 정렬을 함으로써 마무리 한다.

 

본 문제는 그렇게 해결할 수 있다.

 

정답코드

SELECT CATEGORY, SUM(SALES) as TOTAL_SALES
FROM BOOK_SALES INNER JOIN BOOK ON BOOK.BOOK_ID = BOOK_SALES.BOOK_ID
WHERE date_format(SALES_DATE, '%Y-%m') = '2022-01' 
GROUP BY CATEGORY
ORDER BY CATEGORY
728x90