SQL/solvesql Advent of SQL 2024

[SQL] solvesql Advent of SQL 2024 8일차

주댕이 2024. 12. 8. 17:44

# 링크

 

https://solvesql.com/collections/advent-of-sql-2024/

 

solvesql.com

 

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

 

solvesql.com

 

# 풀이

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