728x90
반응형
저는 과거 데이터리안의 sql 강의를 수강한 적이 있습니다.
그래서 solvesql 문제가 개방되어 있어요!
강의를 듣지 않아도 무료 문제가 많으니 방문하셔서 sql 문제 푸는 걸 강추합니다.
https://solvesql.com/collections/advent-of-sql-2024/
1 . 문제
문제는 유출하면 안 돼서 간단히 말하면 총매출, 즉 월별 취소총액, 주문총액을 구하기.
2. 접근
1) 월별 GROUP BY을 위한 Su
date가 'YYYY-MM-DD' 형이었기 때문에 'YYYY-MM'으로 처리해야 했다.
SUBSTR을 사용했다.
SUBSTR(str, start, length)
- start: 시작 위치 (1부터 시작)
- length: 추출할 문자 수
SUBSTR(orders.order_date,1,7) 하면 'YYYY-MM'로 처리할 수 있다.
이 방법 뿐만 아니라 다른 함수를 사용해도 무방하다.
2) CASE문을 통한 취소주문 총액 구하기
CASE문은 조건문이나 계산처리에 활용할 수 있다.
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 결과3
END
- 계산처리
SELECT
id,
price,
quantity,
CASE
WHEN quantity >= 10 THEN price * 0.9 -- 10% 할인
ELSE price
END AS final_price
FROM orders;
- 조건문
SELECT
name,
age,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM users;
3) 정답코드
SELECT SUBSTR(orders.order_date,1,7) as order_month,
sum(
case
when SUBSTR(orders.order_id,1,1) = 'C' THEN 0
else price * quantity
END
) AS ordered_amount
,sum(
case
when SUBSTR(orders.order_id,1,1) = 'C' THEN price * quantity
else 0
END
) AS canceled_amount,
sum(case
when SUBSTR(orders.order_id,1,1) = 'C' THEN (price * quantity)
else price * quantity
END) AS total_amount
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.order_id
GROUP BY SUBSTR(orders.order_date,1,7)
ORDER BY order_month;
처음에 맞게 했는데 왜 계속 틀리지 싶었는데 quantity를 곱하지 않아서 값이 맞지 않았다 ㅎ.
문제가 재밌었다!
728x90
반응형
'공부 > 알고리즘' 카테고리의 다른 글
[Solvesql - Advent of SQL 2024] 게임 개발사의 주력 플랫폼 찾기 (0) | 2025.01.04 |
---|---|
[Solvesql - Advent of SQL 2024] 게임 평점 예측하기 1 (1) | 2025.01.01 |
Brand-and-Bound 분기 한정법 (0) | 2020.07.01 |
Computational Complexity(계산 복잡도 이론) (0) | 2020.07.01 |
P, NP, NP-Hard, NP-Complete (0) | 2020.07.01 |