문제
2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 카테고리명을 기준으로 오름차순 정렬해주세요.
💡 조건
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을 너무 의지하지 말고 위 코드처럼 사용하지 않는 경우에도 로직을 해결해보자.