JOIN ON조건을 잘 활용하면 굉장히 쉬워진다.

Gi Woon Lee·2025년 4월 17일
0

TIL

목록 보기
78/78

leetcode_1251.Average Selling Price

상품 가격 정보(Prices)판매 정보(UnitsSold)를 기반으로, 각 상품의 평균 판매 가격을 구하는 문제.
단, 판매된 기록이 없는 상품은 평균 가격을 0으로 출력해야 한다.

select 
    p.product_id, round(ifnull(sum(units * price) / sum(units), 0), 2) average_price
from 
    prices p left join unitssold u
    on p.product_id = u.product_id and purchase_date between start_date and end_date
group by
    p.product_id

위 링크의 문제처럼, 판매된 아이템의 평균 가격을 구하는 문제에서 만약 하나도 팔리지 않은 경우 0을 원하는 경우가 종종 있다. 이럴땐 2가지를 기억하면 된다.

  1. join시 left를 적절히 사용하여 "없는 값"은 null값이라도 등장하게 한다.
  2. 마지막 select에서 ifnull을 사용하여 null값일 때 0을 채워준다.

위 문제를 가져온 또 하나의 이유는 join의 조건절 on을 잘 활용하면 시간을 엄청나게 아낄 수 있음을 기억하기 위해서이다.

위 쿼리의 join부분을 보면

  • on p.product_id = u.product_id and purchase_date between start_date and end_date

으로 단순히 같은 칼럼임에 "더하여" 판매 날짜가 프로모션 기간 안에 속한 경우만 join하도록 했다.
이 기능을 알고 모르고는 효율성에 있어서 큰 차이가 있으니 반드시 기억하도록 하자.


한 마디 요약.
🔥 ON 절 조건을 적극적으로 활용하자!

0개의 댓글