1251. Average Selling Price

최지웅·2025년 7월 15일

LeetCode

목록 보기
33/37

문제 이해를 기반으로 한 첫 접근은 아래와 같았다.

# Write your MySQL query statement below
# Price에는 기간 별 변동되는 가격의 정보를 가지고 있다.
# Unitsold에는 물품이 결제된 날짜 정보를 가지고 있다.
# 판매된 제품 별 평균 가를 소수점 2자리 까지 출력하라
SELECT *
FROM UnitsSold as u LEFT JOIN Prices as p
ON u.product_id=p.product_id
WHERE p.end_date>=u.purchase_date AND u.purchase_date>=p.start_date
;

(노트북 방전으로 폰으로..)

여기에서 아이디 별 전체 가격의 평균을 계산하면 된다

좀 했갈리긴 했지만 아래와 같이 해결하였다.

# Write your MySQL query statement below
# Price에는 기간 별 변동되는 가격의 정보를 가지고 있다.
# Unitsold에는 물품이 결제된 날짜 정보를 가지고 있다.
# 판매된 제품 별 평균 가를 소수점 2자리 까지 출력하라
SELECT u.product_id, ROUND(SUM(p.price*u.units)/SUM(u.units), 2) average_price
FROM UnitsSold as u LEFT JOIN Prices as p
ON u.product_id=p.product_id
WHERE p.end_date>=u.purchase_date AND u.purchase_date>=p.start_date
GROUP BY u.product_id
;

(25.07.17)
문제가 된 경우는 다음과 같다.

현재 기준을 판매된 제품을 기준으로 하여 UnitsSold의 product_id을 기준으로 결과를 출력했는데, 이 문제에서는 판매된 제품이 없으면 출력을 안하는 것이 아닌 제품의 평균 판매가를 0으로 세팅하길 원하고 있다.

이것저것 건들여봤지만 WHERE에서 날짜 체크때문에 다 걸러진다. 한번 더 조인을 해야하나..?
고민 고민을 하다가 하나의 WHERE에서 u.units가 NULL일 때를 필터링해서 문제가 발생하는 것이니, 우선 OR을 통해 통과시킨 후, SELECT에서 IF를 이용해 0으로 핸들링해주었다.

# Write your MySQL query statement below
# Price에는 기간 별 변동되는 가격의 정보를 가지고 있다.
# Unitsold에는 물품이 결제된 날짜 정보를 가지고 있다.
# 판매된 제품 별 평균 가를 소수점 2자리 까지 출력하라
SELECT p.product_id, IF(u.units IS NULL, 0, ROUND(SUM(p.price*u.units)/SUM(u.units), 2)) average_price
FROM Prices as p LEFT JOIN UnitsSold as u
ON u.product_id=p.product_id
WHERE (u.units IS NULL) OR (p.end_date>=u.purchase_date AND u.purchase_date>=p.start_date)
GROUP BY p.product_id

profile
이제 4학년!!!

0개의 댓글