Algorithm/Programmars

[SQL] 저자 별 카테고리 별 매출액 집계하기 - 프로그래머스[Lv.4]

mopipi 2024. 1. 28. 20:50
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/144856

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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;

 

 

반응형