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 -- 주문 월을 기준으로 결과를 오름차순 정렬
'SQL' 카테고리의 다른 글
[solvesql - day 10] 최대값을 가진 행 찾기 (0) | 2025.01.10 |
---|---|
[solvesql - day 9] 게임 평점 예측하기 1 (0) | 2025.01.10 |
[solvesql - day 7] 기증품 비율 계산하기 (0) | 2025.01.10 |
[solvesql - day 6] 게임을 10개 이상 발매한 퍼블리셔 찾기 (0) | 2025.01.10 |
[solvesql - day 5] 언더스코어(_)가 포함되지 않은 데이터 찾기 (0) | 2025.01.10 |