본문 바로가기
SQL

[solvesql - day 8] 온라인 쇼핑몰의 월 별 매출액 집계

by 우솨 2025. 1. 10.

https://solvesql.com/problems/shoppingmall-monthly-summary/

 

https://solvesql.com/problems/shoppingmall-monthly-summary/

 

solvesql.com

-- 'orders' 테이블과 'order_items' 테이블을 결합하여 주문 월별로 총 주문 금액, 취소 금액, 총 금액을 계산하는 쿼리
SELECT 
    -- 'A.order_date'에서 처음 7자리를 추출하여 주문 월을 구함 ('YYYYMMDD' 형식에서 'YYYYMM' 부분 추출)
    substring(A.order_date, 0, 8) AS order_month,  -- 주문 날짜에서 월 단위로 추출 (형식: 'YYYYMM')

    -- 'B.order_id'가 'C%'로 시작하지 않는 경우 (즉, 취소되지 않은 주문)에 대해
    -- 해당 주문의 가격 * 수량을 합산하여 주문 금액을 계산
    sum(CASE WHEN B.order_id NOT LIKE 'C%' THEN B.price * B.quantity END) AS ordered_amount, 

    -- 'B.order_id'가 'C%'로 시작하는 경우 (즉, 취소된 주문)에 대해
    -- 해당 주문의 가격 * 수량을 합산하여 취소 금액을 계산
    sum(CASE WHEN B.order_id LIKE 'C%' THEN B.price * B.quantity END) AS canceled_amount,

    -- 모든 'B.order_id'에 대해 가격 * 수량을 합산하여 총 금액을 계산
    sum(B.price * B.quantity) AS total_amount

FROM 
    orders AS A  -- 'orders' 테이블을 A로 alias 설정
JOIN 
    order_items AS B  -- 'order_items' 테이블을 B로 alias 설정
    ON A.order_id = B.order_id  -- 'orders'와 'order_items'를 order_id를 기준으로 조인

GROUP BY 
    order_month  -- 주문 월별로 그룹화하여 계산된 금액을 월별로 집계

ORDER BY 
    order_month  -- 주문 월을 기준으로 결과를 오름차순 정렬