본문 바로가기
MYSQL

[프로그래머스 LV.04] MYSQL 저자 별 카테고리 별 매출액 집계

by hello_world.cpp 2025. 5. 19.
728x90
반응형

 

저자 별 카테고리 별 매출액 집계하기

https://school.programmers.co.kr/learn/courses/30/lessons/144856

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

다음은 어느 한 서점에서 판매 중인 도서들의 정보가 담긴 BOOK, AUTHOR, BOOK_SALES 테이블입니다.

  • BOOK 테이블: 도서 ID, 카테고리, 저자 ID, 가격, 출판일 정보를 포함
  • AUTHOR 테이블: 저자 ID와 저자명을 포함
  • BOOK_SALES 테이블: 도서별 날짜별 판매량 정보 포함

2022년 1월 판매 데이터를 기준으로 저자별, 카테고리별 총 매출액(판매량 × 판매가)을 계산하고,
저자 ID, 저자명, 카테고리, 매출액을 출력하세요.
결과는 저자 ID 오름차순, 같은 저자 ID 내에서는 카테고리 내림차순으로 정렬해야 합니다.

테이블 구조 예시

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
AUTHOR_ID AUTHOR_NAME
1 홍길동
2 김영호
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

예시 설명

- 도서 ID 1: 총 판매량 3권 (2 + 1), 가격 10,000원 → 매출 30,000원
- 도서 ID 2: 총 판매량 14권 (3 + 5 + 6), 가격 9,000원 → 매출 126,000원
- 도서 ID 3: 총 판매량 2권, 가격 9,000원 → 매출 18,000원

이를 저자와 카테고리별로 집계하면 다음과 같습니다:

AUTHOR_ID AUTHOR_NAME CATEGORY TOTAL_SALES
1 홍길동 인문 30000
1 홍길동 경제 126000
2 김영호 경제 18000

SQL 쿼리


SELECT 
    B.AUTHOR_ID,
    C.AUTHOR_NAME,
    B.CATEGORY,
    SUM(B.PRICE * A.SALES_SUM) AS TOTAL_SALES
FROM (
    -- 2022년 1월 판매량을 BOOK_ID별로 합산
    SELECT BOOK_ID, SUM(SALES) AS SALES_SUM
    FROM BOOK_SALES
    WHERE SALES_DATE >= '2022-01-01' AND SALES_DATE < '2022-02-01'
    GROUP BY BOOK_ID
) A
JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID
JOIN AUTHOR C ON B.AUTHOR_ID = C.AUTHOR_ID
GROUP BY B.AUTHOR_ID, C.AUTHOR_NAME, B.CATEGORY
ORDER BY B.AUTHOR_ID ASC, B.CATEGORY DESC;

쿼리 설명

  1. BOOK_SALES 테이블에서 2022년 1월 판매량만 필터링하여, 도서별 총 판매량(SALES_SUM)을 계산합니다.
  2. 이렇게 계산한 도서별 판매량을 BOOK 테이블과 조인하여, 도서 가격과 저자 정보를 가져옵니다.
  3. AUTHOR 테이블과 조인하여 저자명을 얻습니다.
  4. 저자 ID, 저자명, 도서 카테고리별로 그룹화하여, 판매량 × 가격을 합산한 매출액(TOTAL_SALES)을 계산합니다.
  5. 결과는 저자 ID 오름차순, 같은 저자 내에서는 카테고리 내림차순으로 정렬합니다.
728x90
반응형

댓글