https://school.programmers.co.kr/learn/courses/30/lessons/144856#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
이 문제에서 애를 먹었던 부분은 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하는 것이었다.
아래 코드 상에서 1번 라인의 SUM(s.SALES*b.PRICE) 부분이 그것이다.
처음에는 SUM(s.SALES)*b.PRICE 와 같이 코드를 작성했었는데 이 코드로는 오답처리가 되었다.
SUM(s.SALES*b.PRICE) 는 되고, SUM(s.SALES)*b.PRICE 는 안되는 이유는 무엇일까?
문제의 발문을 다시 들여다 보면,
"저자 별, 카테고리 별 매출액"을 구하라고 되어있다.
곰곰이 생각해보니 저자와 카테고리 별로 그룹 처리를 했을 때, 각 그룹 내에서도 다양한 책(그에 따라 다양한 가격)이 있을 수 있음을 간과했음을 알 수 있었다.
SUM(s.SALES)*b.PRICE 와 같이 판매량(sales)을 먼저 집계한 후 가격(price)을 곱해주면 가격의 다양성을 무시하게 되어 잘못된 결과를 도출하게 되는 것이다.
따라서, 각각의 도서에 해당하는 판매량과 가격을 곱해준 후 집계함수 SUM()을 사용하는 것이 바른 결과를 도출해내게 된다.
MySQL 코드
-- 저자 별 카테코리 별 매출액 집계
SELECT a.AUTHOR_ID, a.AUTHOR_NAME, b.CATEGORY, SUM(s.SALES*b.PRICE) 'TOTAL_SALES'
FROM BOOK_SALES s
JOIN BOOK b USING(BOOK_ID)
JOIN AUTHOR a USING(AUTHOR_ID)
WHERE YEAR(s.SALES_DATE) = 2022 AND MONTH(s.SALES_DATE) = 1
GROUP BY a.AUTHOR_ID, b.CATEGORY
ORDER BY 1, 3 DESC
'DataBase > SQL 문제풀이' 카테고리의 다른 글
[SQL] MySQL에서의 비트연산 / 프로그래머스 Front End 개발자 찾기 (0) | 2024.03.24 |
---|---|
[SQL] GROUP BY 사용 시 주의점 (1) | 2024.03.23 |
[프로그래머스] SELECT / 오프라인/온라인 판매 데이터 통합하기 (0) | 2022.12.13 |
[프로그래머스] SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2022.12.06 |
[프로그래머스] GROUP BY / 가격대 별 상품 개수 구하기 (0) | 2022.11.30 |