SQL/문제풀이

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

응엉잉 2024. 1. 5. 09:45

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

 

프로그래머스

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

programmers.co.kr

 

정답 쿼리는 다음과 같다.

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를 적절히 사용해준다.