♟️ 알고리즘/Leetcode

[MySQL][Leet Code] 1251. Average Selling Price (Easy)

Jerry_K 2025. 2. 18. 17:14

https://leetcode.com/problems/average-selling-price/description/?envType=study-plan-v2&envId=top-sql-50


🗒️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으로 잘 필터링 필요  

📚문제