inblog logo
|
An's Blog
    SQL코딩테스트

    [코딩테스트] 36. 저자 별 카테고리 별 매출액 집계하기

    윤설안's avatar
    윤설안
    Apr 24, 2025
    [코딩테스트] 36. 저자 별 카테고리 별 매출액 집계하기
    Contents
    테이블 index문제예시풀이

    테이블 index

    📌

    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
    출판일

    AUTHOR 

    Column name
    Type
    Nullable
    Description
    AUTHOR_ID
    INTEGER
    FALSE
    저자 ID
    AUTHOR_NAME
    VARCHAR(N)
    FALSE
    저자명

    BOOK_SALES 

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

    문제

    💡
    2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.
    결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.

    예시

    notion image
    notion image

    풀이

    ❗
    모든 테이블의 컬럼을 연결해서 조회 해야하기 때문에 우선 JOIN을 모두 해주었다.
    SELECT * FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID
    2022년 01월에 도서 판매량만 필요하기 때문에 where문에 YEAR(해당년도만), MONTH(해당 월만)을 이용하여 조건을 걸어주었다
    SELECT * FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
    TOTAL_SALES를 출력하기 위해서는 sum함수를 사용해야함으로 group by를 해야한다. 그룹으로 묶어야 할 column은 author_id, category이다. 적는 순서에 따라 그룹이 먼저 묶이기 때문에 조심하여야한다.
    SELECT A.AUTHOR_ID, B.AUTHOR_NAME,A.CATEGORY FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1
    그룹으로 묶었음으로 sum함수가 사용 가능하다. 하지만 출판 일에 따른 가격이 다르기 때문에 가권수 * 가격 후 같은 카테고리의 책을 sum함수로 더해주면 된다.
    SELECT *, sum(a.PRICE * c.SALES) TOTAL_SALES FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1 group by b.author_id, a.category
    이후 내가 필요한 컬럼만 출력 후 정렬을 해주었다.
    SELECT a.AUTHOR_ID, b.AUTHOR_NAME, a.category, sum(a.PRICE * c.SALES) TOTAL_SALES FROM BOOK A JOIN AUTHOR B ON A.AUTHOR_ID = B.AUTHOR_ID JOIN BOOK_SALES C ON A.BOOK_ID = C.BOOK_ID WHERE YEAR(c.SALES_DATE) = 2022 AND MONTH(c.SALES_DATE) = 1 group by b.author_id, a.category order by b.author_id, a.category desc
    notion image
    notion image
    Share article
    Contents
    테이블 index문제예시풀이

    An's Blog

    RSS·Powered by Inblog