[GROUP BY] 카테고리 별 도서 판매량 집계하기

쥬쥬스·2023년 8월 3일
0

SQL

목록 보기
24/67
post-thumbnail

문제
2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

💡 조건

  • 22년 1월에 팔린 책 : DATE_FORMAT
  • 카테고리별 판매량 : GROUP BY CATEGORY
  • 카테고리, 총 판매량 출력 : CATEGORY, SUM(SALES)
  • 카테고리명 기준 오름차순 : ORDER BY

sql 코드

SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES
FROM BOOK B LEFT JOIN (SELECT *
                     FROM BOOK_SALES
                     WHERE DATE_FORMAT(SALES_DATE,'%Y-%m') = '2022-01') AS S 
                     ON B.BOOK_ID = S.BOOK_ID
GROUP BY CATEGORY
ORDER BY B.CATEGORY

조건에 맞게 하나하나 접근하면 생각하기가 쉽다!
GROUP BY에서도 어떤 테이블의 카테고리인지 명시하는게 더 좋을 것 같다.

DATE_FORMAT을 사용하지 않고 하는 경우도 생각해두면

WHERE B.SALES_DATE LIKE '2022-01%'

WHERE절에 LIKE와 %를 사용해서 조건을 걸어줄 수도 있다.


JOIN을 사용하지 않은 다른 사람 코드도 참고했다.

SELECT CATEGORY, SUM(s.SALES) AS TOTAL_SALES
FROM BOOK b, BOOK_SALES s
WHERE b.BOOK_ID = s.BOOK_ID AND SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY CATEGORY
ORDER BY CATEGORY ASC

간단하게 ID가 같은 경우와 SALES_DATE가 22년 1월인경우에서 카테고리고 묶어서 추출할 수도 있다.

성능 관점에서 보는 결합 의 글을 통해서 JOIN을 최소화할 수 있는 방법을 사용하는게 효율적이다라는 결론을 얻을 수 있었다. JOIN을 너무 의지하지 말고 위 코드처럼 사용하지 않는 경우에도 로직을 해결해보자.

profile
느려도... 꾸준히.....🐌

0개의 댓글