# 링크
- solvesql Advent of SQL 2024: https://solvesql.com/collections/advent-of-sql-2024/
- 8일차 - 온라인 쇼핑몰의 월 별 매출액 집계: https://solvesql.com/problems/shoppingmall-monthly-summary/
# 풀이
SELECT
strftime('%Y-%m', o.order_date) AS order_month,
SUM(CASE WHEN o.order_id NOT LIKE 'C%' THEN oi.price * oi.quantity ELSE 0 END) AS ordered_amount,
SUM(CASE WHEN o.order_id LIKE 'C%' THEN oi.price * oi.quantity ELSE 0 END) AS canceled_amount,
SUM(oi.price * oi.quantity) AS total_amount
FROM
orders AS o
JOIN order_items AS oi
ON o.order_id = oi.order_id
GROUP BY order_month
ORDER BY order_month
- SELECT~:
- strftime('%Y-%m', o.order_date) AS order_month: 주문 날짜(order_date)를 연도-월(YYYY-MM) 형식으로 변환하고, order_month로 저장한다.
- SUM(CASE WHEN o.order_id NOT LIKE 'C%' THEN oi.price * oi.quantity ELSE 0 END) AS ordered_amount: orders 테이블의 order_id가 'C'로 시작하지 않는 경우의 금액을 계산하고, ordered_amount로 저장한다.
- SUM(CASE WHEN o.order_id LIKE 'C%' THEN oi.price * oi.quantity ELSE 0 END) AS canceled_amount: orders 테이블의 order_id가 'C'로 시작하는 경우의 금액을 계산하고, canceled_amount로 저장한다.
- SUM(oi.price * oi.quantity) AS total_amount: 모든 주문 항목의 금액을 계산하고, total_amount로 저장한다.
- FROM orders AS o: orders 테이블의 별칭을 o로 설정하고, orders 테이블에서 데이터를 가져온다.
- JOIN order_items AS oi ON o.order_id = oi.order_id: order_id를 기준으로 orders와 order_items 테이블을 결합한다.
- GROUP BY order_month: order_month를 기준으로 그룹화한다.
- ORDER BY order_month: order_month를 기준으로 오름차순 정렬한다.
728x90
'SQL > solvesql Advent of SQL 2024' 카테고리의 다른 글
[SQL] solvesql Advent of SQL 2024 10일차 (0) | 2024.12.10 |
---|---|
[SQL] solvesql Advent of SQL 2024 9일차 (2) | 2024.12.09 |
[SQL] solvesql Advent of SQL 2024 7일차 (0) | 2024.12.08 |
[SQL] solvesql Advent of SQL 2024 6일차 (0) | 2024.12.06 |
[SQL] solvesql Advent of SQL 2024 5일차 (2) | 2024.12.05 |