susinlee 님의 블로그
110. Product Price at a Given Date 본문
[문제]
https://leetcode.com/problems/product-price-at-a-given-date/description/
[풀이]
1. 2019-08-16을 포함한 이전 날짜들만 필터링하고 product_id는 오름차순, change_date는 내림차순으로 정렬해준다.
2. id 기준으로 중복행을 제거하되 첫번째 행은 제외한다. 완성된 테이블에서 product_id와 new_price열만 가져온다
3. 위의 테이블과 products 테이블에서 고유 product_id만 필터링한 테이블과 병합한다. 고유 product_id 테이블 기준으로 left join해주고, null값을 10으로 채워준 뒤 열이름 조건에 맞게 반환해준다.
Pandas
last_price = products[products['change_date'] <= '2019-08-16'].sort_values(by=['product_id', 'change_date'], ascending=[True, False]).drop_duplicates(subset=['product_id'])[['product_id', 'new_price']]
return pd.merge(products[['product_id']].drop_duplicates(), last_price, how='left').fillna(10).rename(columns={'new_price':'price'})
SQL
SELECT
DISTINCT(product_id)
, 10 AS price
FROM Products
GROUP BY product_id
HAVING MIN(change_date) > '2019-08-16'
UNION ALL
SELECT product_id, new_price
FROM Products
WHERE (product_id, change_date) IN (SELECT product_id, MAX(change_date)
FROM Products
WHERE change_date <= '2019-08-16'
GROUP BY product_id)
'코드카타 > Pandas' 카테고리의 다른 글
113. (0) | 2025.01.20 |
---|---|
111. Last Person to Fit in the Bus (0) | 2025.01.19 |
109. Consecutive Numbers (0) | 2025.01.17 |
112. Count Salary Categories (0) | 2025.01.16 |
108. Triangle Judgement (0) | 2025.01.15 |