SQL 문제

문제 68. 저자 별 카테고리 별 매출액(난이도 10)

kagan-draca 2024. 8. 1. 16:20

 

문제를 보고 BOOK_SALES 테이블을 바탕으로

2022년 1월 판매된 BOOK_ID의 판매량 합 테이블을 새로 만들어줬다.

 

만드는 방법으로는 

 

    SELECT BOOK_ID, SUM(SALES) AS SALES
    FROM BOOK_SALES
    WHERE SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
    GROUP BY BOOK_ID

 

으로 비교적 쉽게 만들 수 있었다.

 

이렇게 만들어진 테이블과 나머지 2개의 테이블을 3중 JOIN 시켜줬다.

(이전 문제를 바탕으로 학습한 내용 사용)

 

FROM BOOK AS A INNER JOIN AUTHOR AS B
ON A.AUTHOR_ID = B.AUTHOR_ID
INNER JOIN
(
    SELECT BOOK_ID, SUM(SALES) AS SALES
    FROM BOOK_SALES
    WHERE SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
    GROUP BY BOOK_ID
) AS C
ON A.BOOK_ID = C.BOOK_ID

그렇게 만든 결과를 출력하니,

(중요)한 저자가 같은 CATEGORY 책을 2권 쓴 경우가 있었다.

 

그래서,

 

GROUP BY B.AUTHOR_NAME, A.CATEGORY

한 저자가 같은 CATEGORY 도서를 2권 이상 썼더라도

카테고리에 따른 하나의 그룹 테이블로 만들어줬다.

 

하나의 그룹 테이블에 2개 이상의 튜플이 존재할 수 있기 때문에

SELECT 문에서는 

 

SUM(A.PRICT * C.SALES) AS TOTAL_SALES

 

한 저자가 같은 CATEGORY로 만든 책이 2권 있더라도

2권의 개별 매출액의 합으로 출력되게 만들었다.

 

제출한 코드 : 

 

SELECT B.AUTHOR_ID, B.AUTHOR_NAME, A.CATEGORY, SUM(A.PRICE * C.SALES) AS TOTAL_SALES
FROM BOOK AS A INNER JOIN AUTHOR AS B
ON A.AUTHOR_ID = B.AUTHOR_ID
INNER JOIN
(
    SELECT BOOK_ID, SUM(SALES) AS SALES
    FROM BOOK_SALES
    WHERE SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
    GROUP BY BOOK_ID
) AS C
ON A.BOOK_ID = C.BOOK_ID
GROUP BY  B.AUTHOR_NAME, A.CATEGORY
ORDER BY B.AUTHOR_ID ASC, A.CATEGORY DESC