https://school.programmers.co.kr/learn/courses/30/lessons/144856
WITH SALES AS (SELECT B.PRICE * S.CNT TOTAL_SALES, B.AUTHOR_ID AID, B.CATEGORY
FROM BOOK B
LEFT JOIN (SELECT SUM(SALES) CNT, BOOK_ID FROM BOOK_SALES
WHERE SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31' GROUP BY BOOK_ID) S
ON S.BOOK_ID = B.BOOK_ID)
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, S.CATEGORY, SUM(S.TOTAL_SALES)
FROM SALES S
RIGHT JOIN AUTHOR A
ON S.AID = A.AUTHOR_ID
GROUP BY S.AID, S.CATEGORY
ORDER BY AUTHOR_ID, CATEGORY DESC;
풀이
💡 BOOK_ID가 다른데 저자ID, 카테고리가 같을 수 있음! ㅡㅡ >> 이런 경우 가격도 다르다;;
book_id | category | author_id | price | published_date |
1 | 경제 | 1 | 9000 | 2020-01-10 00:00:00 |
2 | 경제 | 1 | 12000 | 2021-06-10 00:00:00 |
3 | 인문 | 1 | 11000 | 2021-10-24 00:00:00 |
4 | 소설 | 2 | 7500 | 2020-03-03 00:00:00 |
5 | 기술 | 3 | 11000 | 2020-02-17 00:00:00 |
6 | 기술 | 3 | 8000 | 2020-04-29 00:00:00 |
7 | 생활 | 3 | 9500 | 2021-08-20 00:00:00 |
1. BOOK_SALES 테이블에서 BOOK_ID 별 총 판매 권수를 구해야 함
> GROUP BY BOOK_ID 후 > SUM(SALES) 로 구하기
> ❗ ❗ 2022년 1월 데이터만 뽑아야 하므로 WHERE 조건 필수!
2. BOOK_ID 별 판매 권수 * BOOK 테이블의 BOOK_ID별 판매 금액
> 이때 BOOK_ID를 기준으로 BOOK_SALES , BOOK 테이블을 JOIN 후 BOOK_ID별 금액 * 총 개수
→ [BOOK_ID별 판매 총액]을 구해줌
3. 이후 BOOK_ID 별 매출 테이블 & 저자 테이블을 JOIN 함
> 예외 경우를 고려해 저자 ID, 카테고리 기준으로 GROUP BY
> 합쳐지는 경우 SUM으로 판매 총액 더해서 찐 최종 판매 총액 구하기
더보기
✅ 3중 JOIN을 사용해서 좀 더 간단하게 표현할 수 있음!!
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.PRICE * S.SALES) AS TOTAL_SALES
FROM BOOK_SALES S
JOIN BOOK B
ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A
ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE DATE_FORMAT(S.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY B.AUTHOR_ID, B.CATEGORY
ORDER BY A.AUTHOR_ID, B.CATEGORY DESC;
'Algorithm > Programmars' 카테고리의 다른 글
[SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 - 프로그래머스[Lv.3] (1) | 2024.01.31 |
---|---|
[SQL] 입양 시각 구하기(2) - 프로그래머스[Lv.4] (1) | 2024.01.29 |
[SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 - 프로그래머스[Lv.3] (0) | 2024.01.27 |
[SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 - 프로그래머스[Lv.3] (1) | 2024.01.27 |
[JAVA] 입국심사 - 프로그래머스[Lv.3] (0) | 2024.01.25 |