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
'Skills > SQL' 카테고리의 다른 글
프로그래머스: 주문량이 많은 아이스크림들 조회하기 (MySQL) (0) | 2024.03.05 |
---|---|
프로그래머스: 없어진 기록 찾기 (MySQL) (1) | 2024.03.04 |
프로그래머스: 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (MySQL) (0) | 2024.03.02 |
프로그래머스: 조건에 부합하는 중고거래 댓글 조회하기 (MySQL) (1) | 2024.02.29 |
제로부터 시작하는 SQL 세계 #1 (sakila 데이터베이스를 활용한 실습) (1) | 2022.07.14 |