🍋 ⚾️ 💻 🎬 🎮

coding_test/SQL 문제

[LeetCode] 1251. Average Selling Price (AGGREGATE)

aeightchill 2025. 2. 10. 15:37
728x90

< 문제 >

[SQL50] 1251. Average Selling Price (AGGREGATE)



< 풀이 >

SELECT A.product_id, 
       COALESCE(ROUND(SUM(A.price * B.units) / NULLIF(SUM(B.units), 0)::decimal, 2),0) AS average_price
FROM Prices A LEFT JOIN UnitsSold B ON A.product_id = B.product_id 
                                   AND A.start_date <= B.purchase_date
                                   AND B.purchase_date <= A.end_date
GROUP BY A.product_id;
  • Prices LEFT JOIN UnitsSold
    • Table Prices        : 제품 가격 정보 (product_id, price, start_date, end_date) 포함
    • Table UnitsSold  : 제품 판매 정보 (product_id, purchase_date, units) 포함
    • 모든 Prices 데이터가 유지되며, UnitsSold 데이터가 없을 경우 NULL을 반환할 수 있다.
  • COALESCE(ROUND(SUM(A.price * B.units) / NULLIF(SUM(B.units), 0)::decimal, 2),0) AS average_price
    • SUM(A.price * B.units)  :  각 가격별로 판매된 개수를 곱한 값들의 합
    • SUM(B.units)                  :  판매된 개수의 총합
    • SUM(A.price * B.units) / (SUM(B.units)  : 평균 가격
    •  
    • NULL 처리
      • NULLIF(SUM(B.units), 0)  :  SUM(B.units)이 0이면 NULL로 변환하여 0으로 나누는 오류 방지
      • ROUND(..., 2)                     :  소수점 2자리로 반올림
      • COALESCE(..., 0)               :  NULL값을 0으로 치환 (판매 기록이 없는 경우 평균 가격을 0으로 설정)

 

 

COALESCE

null값 처리

https://youngone-kang.tistory.com/52

 

ROUND

반올림 처리

https://youngone-kang.tistory.com/51

 

 

 

 

 

728x90