https://school.programmers.co.kr/learn/courses/30/lessons/144856
정답 쿼리는 다음과 같다.
SELECT b.author_id,
a.author_name,
b.category,
SUM(b.price * s.sales) AS total_sales
FROM book b
LEFT JOIN book_sales s ON s.book_id = b.book_id
LEFT JOIN author a ON b.author_id = a.author_id
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-01'
GROUP BY b.author_id, a.author_name, b.category
ORDER BY b.author_id, b.category DESC
1. 모든 table의 정보를 사용하기 위해 JOIN 해준다.
2. book_sales 중에서 2022년 1월 정보만 뽑기 위해 WHERE절로 조건을 작성해준다.
3. 저자별 / 카테고리별 매출액을 확인하기 위해 author와 category로 GROUP BY를 해준다.
4. total_sales를 구하기 위해 price * sales ( 가격 * 판매수량) 를 SUM 해준다.
이때 SUM 함수의 위치가 약간 헷갈렸었는데, 처음에는 price * SUM(sales) 로 쿼리를 작성했다.
sales의 합이 구해지고, 그다음에 price를 곱해야 정확한 total_sales가 아닌가? 라고 생각했다.
하지만 이렇게 되면 하나의 카테고리 안에서 여러개의 책을 집필한 작가의 경우 문제가 생긴다.
가격이 책별로 다를 수 있기 때문에 판매량을 먼저 죄다 합쳐버린 후 가격을 곱하면 안된다는 것이다!
5. ORDER BY를 적절히 사용해준다.
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.01.09 |
---|---|
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 (0) | 2024.01.05 |
[프로그래머스] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.01.03 |
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.01.02 |
[프로그래머스] 오랜 기간 보호한 동물 (1) (0) | 2024.01.02 |