728x90
[문제]
https://leetcode.com/problems/product-price-at-a-given-date/submissions/1624481627/
[COALESCE 예시]
SELECT COALESCE(NULL, NULL, 'Apple', 'Banana');
-- 결과: 'Apple'
[함수 지원 DB 특징]
| COALESCE | 표준 SQL | 다수 인자 가능, 범용적 사용 가능 |
| IFNULL(a, b) | MySQL | 2개 인자만 비교, MySQL 전용 |
| ISNULL(a, b) | SQL Server | 2개 인자만 비교, SQL Server 전용 |
[1차 시도]
SELECT product_id,
COALESCE(
MAX(CASE WHEN change_date <= '2019-08-16' THEN new_price END), 10
) AS price
FROM Products
GROUP BY product_id
;
다음 테스트에서는 통과

하지만 new_price가 중간에 가격이 낮아질 수도 있다면 통과되지 않음...!

[해결 방법]
- product_id별 chage_date의 내림차순 랭킹 만들어서 가장 낮은 (rank = 1)인 값만 가져오기
- 2019-08-16 시점에 없는 애들은 10으로 가져오기
[정답 코드]
WITH cte AS (
SELECT *, RANK() OVER (PARTITION BY product_id ORDER BY change_date DESC) AS r
FROM Products
WHERE change_date<= '2019-08-16'
)
SELECT product_id, new_price AS price
FROM cte
WHERE r = 1
UNION
SELECT product_id, 10 AS price
FROM Products
WHERE product_id NOT IN (SELECT product_id FROM cte)
728x90
'SQL' 카테고리의 다른 글
| [MySQL] 날짜 원하는 타입으로 출력 _ DATE_FORMAT (0) | 2025.04.29 |
|---|---|
| [MySQL] 실수, 정수 나눗셈 _ 정수 나눗셈 결과 0일 때 (0) | 2025.04.29 |
| [PostgreSQL] ::, CASE_ type 변환 (0) | 2025.03.12 |
| [PostgreSQL] FILTER_SELECT문 속의 조건 (0) | 2025.03.12 |
| [SQL]LAG(), LEAD()함수 _현재 행의 이전 행의 값 참조하기 (0) | 2025.02.10 |