본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 저자 별 카테고리 별 매출액 집계하기

by kime2 2024. 1. 29.
출처

 

문제

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

문제에 대한 해석

-- 조건: 2022년 1월 판매
-- 출력 : 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES)
-- 정렬: 저자 ID를 오름차순, 카테고리를 내림차순

풀이(MYSQL)

with temp as (
select b.author_id, b.category, sum(b.price*bs.sales) as sales
from book b join book_sales bs
on b.book_id = bs.book_id
where date_format(bs.sales_date,'%Y-%m') = '2022-01'
group by b.author_id, b.category
    )
    select a.author_id, a.author_name, t.category, t.sales
    from temp t join author a
    on t.author_id = a.author_id
    order by a.author_id, t.category desc

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. WITH 절: temp
    1. FROM 절:  book 테이블과 book_sales테이블을 book_id를 기준으로 inner join
    2. WHERE 절: date_format을 통해 sales_date의 '%Y-%m'가 '2022-01'와 동일한 경우 필터링
    3. GROUP BY 절: author_id와 b.category을 통해 그룹화
    4. SELECT 절: author_id별 b.category별 (price*bs.sales)의 합을 계산하여 sales컬럼에 조회
  2. FROM 절: temp테이블과 author테이블을 author_id기준으로 inner join
  3. SELECT 절: author_id, author_name, category, sales 조회
  4. ORDER BY 절: author_id 오름차순 category 내림차순

 

다른사람 풀이

SELECT B.AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(SALES*PRICE) AS TOTAL_SALES
FROM BOOK_SALES S JOIN BOOK B ON S.BOOK_ID = B.BOOK_ID 
                  JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE SALES_DATE LIKE ('2022-01%')
GROUP BY B.AUTHOR_ID, AUTHOR_NAME, CATEGORY
ORDER BY AUTHOR_ID ASC, CATEGORY DESC