Table: Product
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| product_id | int |
| product_name | varchar |
| unit_price | int |
+--------------+---------+
product_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다.
이 테이블의 각 행은 각 제품의 이름과 가격을 나타냅니다.
Table: Sales
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| seller_id | int |
| product_id | int |
| buyer_id | int |
| sale_date | date |
| quantity | int |
| price | int |
+-------------+---------+
이 테이블에는 중복된 행이 있을 수 있습니다.
product_id는 Product 테이블에 대한 외래 키(참조 열)입니다.
이 테이블의 각 행은 하나의 판매에 대한 정보를 포함합니다.
문제
2019년 첫 분기(2019-01-01에서 2019-03-31까지)에만 판매된 제품을 보고하는 솔루션을 작성하세요.
결과 테이블은 임의의 순서로 반환하세요.
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Product table:
+------------+--------------+------------+
| product_id | product_name | unit_price |
+------------+--------------+------------+
| 1 | S8 | 1000 |
| 2 | G4 | 800 |
| 3 | iPhone | 1400 |
+------------+--------------+------------+
Sales table:
+-----------+------------+----------+------------+----------+-------+
| seller_id | product_id | buyer_id | sale_date | quantity | price |
+-----------+------------+----------+------------+----------+-------+
| 1 | 1 | 1 | 2019-01-21 | 2 | 2000 |
| 1 | 2 | 2 | 2019-02-17 | 1 | 800 |
| 2 | 2 | 3 | 2019-06-02 | 1 | 800 |
| 3 | 3 | 4 | 2019-05-13 | 2 | 2800 |
+-----------+------------+----------+------------+----------+-------+
Output:
+-------------+--------------+
| product_id | product_name |
+-------------+--------------+
| 1 | S8 |
+-------------+--------------+
설명 :
제품 ID 1은 2019년 봄에만 판매되었습니다.
제품 ID 2는 2019년 봄에 판매되었지만 그 이후에도 판매되었습니다.
제품 ID 3은 2019년 봄 이후에 판매되었습니다.
우리는 2019년 봄에만 판매된 제품인 제품 1만 반환합니다.
✏️ 풀이
import pandas as pd
def sales_analysis(product: pd.DataFrame, sales: pd.DataFrame) -> pd.DataFrame:
df = sales.groupby('product_id').agg(min=('sale_date', 'min'), max=('sale_date', 'max')).reset_index()
df = df[(df['min'] >= '2019-01-01') & (df['max'] <= '2019-03-31')]
result = pd.merge(df, product, how='inner', on='product_id')
return result[['product_id', 'product_name']]
1. 전체 판매 내역에서 '2019-01-01' ~ 2019-03-31' 사이에 판매 된 물건들에 한해서만 데이터를 조회해야함
2. 각 상품별로 판매 내역 날짜의 min, max를 구함
3. min >= '2019-01-01' & max <= '2019-03-31' 조건에 맞는 데이터 필터
4. product 테이블과 조인하여 필요 데이터 조회
'[코딩테스트] > [Pandas]' 카테고리의 다른 글
[LeetCode - Pandas] (Easy) 1068. Product Sales Analysis I (0) | 2025.04.23 |
---|---|
[LeetCode - Pandas] (Easy) 1075. Project Employees I (0) | 2025.04.23 |
[LeetCode - Pandas] (Easy) 1141. User Activity for the Past 30 Days I (0) | 2025.04.22 |
[LeetCode - Pandas] (Easy) 1148. Article Views I (0) | 2025.04.21 |
[LeetCode - Pandas] (Easy) 1179. Reformat Department Table (0) | 2025.04.21 |