안녕하세요!
오늘은 프로그래머스 SQL 고득점 Kit 중 GROUP BY 분야의 '저자 별 카테고리 매출액 집계하기' 문제 리뷰를 진행하겠습니다.
문제는 아래 링크에서 확인해주시면 됩니다.
https://school.programmers.co.kr/learn/courses/30/lessons/144856
- 문제 설명
- 문제
- 예시
- 문제를 파악하여 쿼리 생각하기
예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 책의
- 저자 ID : AUTHOR_ID
→ AUTHOR_ID가 소속되어 있는 BOOK / AUTHOR 두 개의 테이블 중에서 아무 테이블에서 가져오시면 됩니다. - 저자 이름 : AUTHOR_NAME
- 장르 : CATEGORY
- 총 매출 : SUM(PRICE*SALES) TOTAL_SALES
→ 각 책에 대한 금액과 판매 권수만 나와있기 때문에 금액*판매 권수를 하면 각 책의 매출 금액을 알 수 있습니다.
→ 저자별, 카테고리 별 총 매출액을 알고 싶기 때문에 각 책의 매출 금액을 합쳐야 최종 매출액을 구할 수 있습니다.
→ TOTAL_SALES는 총 매출액의 컬럼을 별칭으로 지정한 것 입니다.
총 4개인 것을 확인할 수 있습니다.
다음으로 테이블을 JOIN 해야하는 부분은
- BOOK 테이블과 AUTHOR 테이블을 AUTHOR_ID 기준으로 동시 만족 : JOIN AUTHOR b ON a. AUTHOR_ID=b. AUTHOR_ID
→ 여기서 a는 BOOK 테이블의 별칭이라고 생각하시면 됩니다. - BOOK 테이블과 BOOK_SALES 테이블을 BOOK_ID를 기준으로 동시 만족 : JOIN BOOK_SALSE c ON a.BOOK_ID=c.BOOK_ID
위와 같은 것을 확인할 수 있습니다.
다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은
- 2022년 1월 기준 : SALES_DATE LIKE '2022-01%'
→ 날짜가 '연도-월-일'의 형태로 들어오고 있고, 연도와 월만 생각하면 되기 때문에 일에 어떤 값이 와도 상관없다는 뜻으로 %를 붙여주시면 됩니다.
→ 만약 1월을 기준으로 한다면 SALES_DATE LIKE '%01%' 조건이 됩니다.
총 1개 인 것을 확인할 수 있습니다.
다음으로 저희가 GROUP BY 해야하는 부부은
- 저자 별 카테고리 별 : AUTHOR_ID, AUTHOR_NAME, CATEGORY,
→ AUTHOR_NAME 는 AUTHOR_ID에 귀속되어져 있기 때문에 함께 GROUP BY 해주셔도 되고, 안해주셔도 됩니다만, 집계 함수를 제외한 나머지 컬럼은 최대한 모두 그룹화해주시는 것이 좋습니다.
→ AUTHOR_ID가 아닌 AUTHOR_NAME으로 그룹화를 하게되면, 동명이인 즉 이름은 동일하지만 다른 사람이 동일한 사람으로 집계가 되지 때문에 반드시 AUTHOR_ID가 기준이 되어야 합니다.
위와 같은 것을 확인할 수 있습니다.
마지막으로 저희가 문제에서 확인해야 하는 부분은
- 저자 ID 오름차순, 카테고리 내림차순 정렬 : ORDER BY AUTHOR_ID, CATEGORY DESC
총 1개인 것을 확인할 수 있습니다.
- 쿼리 완성하기
이제 위에서 생각한 쿼리를 SQL 실행순서에 맞게 배치해주시면 됩니다.
그렇게 완성된 쿼리는 아래와 같습니다.
SELECT b.AUTHOR_ID,
AUTHOR_NAME,
CATEGORY,
SUM(PRICE*SALES) AS TOTAL_SALES
FROM BOOK a
JOIN AUTHOR b ON b.AUTHOR_ID=a.AUTHOR_ID
JOIN BOOK_SALES c ON a.BOOK_ID=c.BOOK_ID
WHERE SALES_DATE LIKE '2022-01%'
-- 숫자에 직접 컬럼 이름을 넣어주셔도 됩니다.
-- 각 숫자는 컬럼의 순서를 의미합니다.
GROUP BY 1,2,3
ORDER BY 1, 3 DESC
궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.
★읽어주셔서 감사합니다★
'SQL > 프로그래머스' 카테고리의 다른 글
[GROUP BY] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (3) | 2024.09.06 |
---|---|
[SELECT] 서울에 위치한 식당 목록 출력하기 (2) | 2024.09.05 |
[JOIN] 있었는데요 없었습니다 (53) | 2024.04.11 |
[GROUP BY] 조건에 맞는 사용자와 총 거래금액 조회하기 (36) | 2024.03.31 |