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

yenpkr·2025년 4월 2일
0

sql

목록 보기
73/91

문제

제출

WITH
  a as (
SELECT
  strftime ('%Y-%m', order_date) order_month,
  sum(
    CASE
      WHEN a.order_id not LIKE 'C%' THEN price*quantity
    end
  ) ordered_amount,
  sum(
    CASE
      WHEN a.order_id LIKE 'C%' THEN price*quantity
    end
  ) canceled_amount
FROM
  orders a
  JOIN order_items b on a.order_id = b.order_id
GROUP BY
  strftime ('%Y-%m', order_date)
  )

SELECT *,(ordered_amount+canceled_amount) total_amount
FROM a

quantity가 취소 주문일 경우 음수인데, 그걸 모르고 CTE로 취소주문일 경우 concat()으로 '-'을 붙이고, 둘을 더하려고 했는데, quantity가 음수로 나와있는걸 알고 풀던 CTE 방식으로 계속 풀다보니 이렇게 풀게 되었다.

또 다른 답

SELECT
  strftime ('%Y-%m', order_date) order_month,
  sum(
    CASE
      WHEN a.order_id not LIKE 'C%' THEN price*quantity
    end
  ) ordered_amount,
  sum(
    CASE
      WHEN a.order_id LIKE 'C%' THEN price*quantity
    end
  ) canceled_amount,
  sum(price*quantity) total_amount
FROM
  orders a
  JOIN order_items b on a.order_id = b.order_id
GROUP BY
  strftime ('%Y-%m', order_date)
ORDER BY 1 asc

CTE를 사용하지 않고, select 문에서 sum을 이용해 주문 금액, 취소 주문 금액, 총합 금액을 도출했다.

0개의 댓글