https://solvesql.com/problems/shoppingmall-monthly-summary/
🔍 문제
us e-commerce 데이터에서 연-월 별로 취소되지 않은 주문 금액의 합계, 취소된 주문 금액 합계, 전체 합계를 구하시오
🎯정답
select
to_char(o.order_date, 'YYYY-MM') as "order_month",
sum(i.price * i.quantity) filter (where o.order_id not like 'C%') as "ordered_amount",
sum(i.price * i.quantity) filter (where o.order_id like 'C%') as "canceled_amount",
sum(i.price * i.quantity) as "total_amount"
from orders o join order_items i on o.order_id = i.order_id
group by to_char(o.order_date, 'YYYY-MM')
order by 1;
❓풀이
- MySQL과 같은 표준 SQL 에서는 `SUM(CASE WHEN order_id LIKE 'C%' THEN price * quantity ELSE 0 END) AS canceled_amount` 과 같이 case when 구문을 사용해서 필터링하는 방법을 사용했다.
- postgressql에서는 조금 더 간단하게 `filter (when ~)` 형태를 사용해서 조건을 걸 수 있다.
- 그리고 특정 문자로 시작하는 데이터를 찾을 때에는 `like 'C%'` 와 같이 where 절에 조건을 걸어서 찾을 수 있다
'프로그래밍 언어 > 02. SQL' 카테고리의 다른 글
| [PostgreSQL] solvesql LV.3 폐쇄할 따릉이 정류소 찾기 2 (0) | 2025.10.15 |
|---|---|
| [PostgreSQL] solvesql LV.3 서울숲 요일별 대기오염도 계산하기 (with.날짜에서 요일 출력하기) (0) | 2025.10.15 |
| [PostgreSQL] solvesql LV.3 멘토링 짝꿍 리스트 (0) | 2025.10.12 |
| [PostgreSQL] solvesql LV.3 쇼핑몰의 일일 매출액과 ARPPU (0) | 2025.10.12 |
| [PostgreSQL] solvesql LV.3 배송 예정일 예측 성공과 실패 (0) | 2025.10.11 |
