Skills/SQL

프로그래머스: 저자 별 카테고리 별 매출액 집계하기 (MySQL)

듀공🥕 2024. 3. 3. 19:28

 

1. 문제

 


2. 문제 풀기 전에,

  • BOOK  👉🏻 저자 ID, 카테고리, 판매가 조회
  • AUTHOR  👉🏻 저자명 조회
  • BOOK_SALES 👉🏻 판매량 조회
  •  2022년 1월 도서 판매 데이터여야 함
  • 저자 ID, 카테고리 ASC

※ 여기서 (판매가*판매량)을 계산하여 TOTAL_SALES 컬럼 추가해야 함


3. 테이블

BOOK AS B

 

AUTHOR AS A

 

BOOK_SALES AS BS

 

4. 풀이 과정

1단계) 세 테이블에 포함된 컬럼을 동시에 조회해야 하니 INNER JOIN을 해준다.

SELECT 
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID

 

2단계) 저자 ID, 저자명, 카테고리, 매출액을 조회하는 SELECT문을 작성해 준다.

매출액은 '판매량 * 판매가'로 계산해주고  TOTAL_SALES 컬럼으로 정의해 준다.

SELECT B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
       SUM(B.PRICE * BS.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID

 

3단계) YEAR(), MONTH() 함수를 이용하여'2022년 1월'을추출하여 WHERE절에 추가해 준다.

SELECT B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
       SUM(B.PRICE * BS.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 01

🙋🏻‍♀️ 만약 데이터 포맷이 ‘%Y-%m-%d %h:%m:%s’의 형태가 아니라 연속된 숫자 형식이라면?

     데이터의 위치를 통해 년도는 0~3번째가 ‘2022’인 것, 월은 4~5번째가 ‘01’인 것으로 조회할 수 있지 않을까?

 

4단계) 저자 별, 카테고리 별 매출액을 집계해야 하니 그룹화를 해 준다.

SELECT B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
       SUM(B.PRICE * BS.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 01
GROUP BY A.AUTHOR_NAME, B.CATEGORY

 

5단계) ORDER BY절을 이용하여 문제에서 제시한 방식으로 정렬해 준다.

SELECT B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
       SUM(B.PRICE * BS.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 01
GROUP BY A.AUTHOR_NAME, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, B.CATEGORY DESC;

 

5. 완성 코드

SELECT B.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY,
       SUM(B.PRICE * BS.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN AUTHOR AS A ON B.AUTHOR_ID = A.AUTHOR_ID
INNER JOIN BOOK_SALES AS BS ON B.BOOK_ID = BS.BOOK_ID
WHERE YEAR(BS.SALES_DATE) = 2022 AND MONTH(BS.SALES_DATE) = 01
GROUP BY A.AUTHOR_NAME, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, B.CATEGORY DESC;

 

 

🔗 관련 링크

프로그래머스 문제 - https://school.programmers.co.kr/learn/courses/30/lessons/144856

728x90