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을 이용해 주문 금액, 취소 주문 금액, 총합 금액을 도출했다.