🗒️SQL 코드 풀이
SELECT P.product_id,
CASE WHEN SUM(U.units)<>0 THEN ROUND(SUM(P.price * U.units)/SUM(U.units),2) ELSE 0 END AS average_price
FROM
Prices P
LEFT JOIN
UnitsSold U
ON
P.product_id = U.product_id
AND U.purchase_date <= P.end_date AND U.purchase_date >= P.start_date
GROUP BY P.product_id
1. " If a product does not have any sold units"
문제에 위와 같은 문구가 있다. units 같은 경우 없는 경우도 있기 때문에 Price를 기준으로 LEFT JOIN을 해준다.
- JOIN 할 때 기준은 product_id
2. 그리고 product_id로 그룹화를 해준다 .
3. SELECT를 할 때는 아래와 같이 문제에서 주어진 식을 기준으로 만든다.
- 주의사항은 LEFT JOIN을 했을 때, units가 0인 경우
- 이와 같은 경우는 CASE WHEN 으로 필터링
- 만약 CASE WHEN으로 필터링을 거치지 않으면 아래와 같은 경우 에러 발생
📌 문제 코멘트
- 사실 별로 어려운 문제는 아닌데, 데이터가 날짜 형식이라 겁을 먹은 것 같다.
- CASE WHEN으로 잘 필터링 필요
📚문제
'♟️ 알고리즘 > Leetcode' 카테고리의 다른 글
[MySQL][Leet Code] 1633. Percentage of Users Attended a Contest (Easy) (1) | 2025.02.18 |
---|---|
[MySQL][Leet Code] 1934. Confirmation Rate (Medium) (0) | 2025.02.18 |
[MySQL][Leet Code] 1280. Students and Examinations (Easy) (0) | 2025.02.17 |
[MySQL][Leet Code] 197. Rising Temperature (Easy) (0) | 2025.02.17 |
[MySQL][Leet Code] 1581. Customer Who Visited but Did Not Make Any Transactions (Easy) (0) | 2025.02.17 |