알고리즘 공부/SQL

[L3] 프로그래머스 ORACLE 카테고리 별 도서 판매량 집계하기

마달랭 2024. 10. 18. 21:38
반응형

테이블 정보

1. BOOK 

Column name Type Nullable Description
BOOK_ID INTEGER FALSE 도서 ID
CATEGORY VARCHAR(N) FALSE 카테고리 (경제, 인문, 소설, 생활, 기술)
AUTHOR_ID INTEGER FALSE 저자 ID
PRICE INTEGER FALSE 판매가 (원)
PUBLISHED_DATE DATE FALSE 출판일

 

 

2. BOOK_SALES 

Column name Type Nullable Description
BOOK_ID INTEGER FALSE 도서 ID
SALES_DATE DATE FALSE 판매일
SALES INTEGER FALSE 판매량

 

 

 

예시 테이블

1. BOOK 

BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 인문 1 10000 2020-01-01
2 경제 1 9000 2021-02-05
3 경제 2 9000 2021-03-11

 

2. BOOK_SALES 

BOOK_ID SALES_DATE SALES
1 2022-01-01 2
2 2022-01-02 3
1 2022-01-05 1
2 2022-01-20 5
2 2022-01-21 6
3 2022-01-22 2
2 2022-02-11 3

 

 

출력 기대값

CATEGORY TOTAL_SALES
경제 16
인문 3

 

 

문제

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

 

 

아이디어

  1. 총 판매량을 알아야 하므로 BOOK_SALES로 서브쿼리를 만들어 준다.
  2. WHERE을 통해 2022년 1월의 카테고리 별 도서 판매량을 간추린다.
  3. GROUP BY를 통해 SALES값을 합산하여 서브쿼리를 제작한다.
  4. 서브쿼리와 BOOK을 BOOK_ID를 키로 JOIN한다.
  5. CATEGORY를 기준으로 B의 판매 총량을 SUM하여 출력해 준다.
  6. 카테고리를 기준으로 오름차순 정렬해 준다.

 

정답

SELECT A.CATEGORY, SUM(B.TOTAL) AS TOTAL_SALES
FROM BOOK A
INNER JOIN (
    SELECT BOOK_ID, SALES_DATE, SUM(SALES) AS TOTAL
    FROM BOOK_SALES
    WHERE TO_CHAR(SALES_DATE, 'YYYYMM') = '202201'
    GROUP BY BOOK_ID, SALES_DATE, SALES
) B
ON A.BOOK_ID = B.BOOK_ID
GROUP BY A.CATEGORY
ORDER BY 1

 

 

참고사항

GROUP BY를 총 두번 써주었다.

 

728x90
반응형