본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Leet code - Average Selling Price

by kime2 2024. 7. 23.
출처

 

문제

각 제품의 평균 판매 가격을 구하는 솔루션을 작성합니다. 소수점 이하 2자리로 반올림해야 합니다.average_price
순서에 관계없이 결과 테이블을 반환합니다.

 

문제에 대한 해석

price테이블과 unitssold테이블을 조인하여 각 제품 id으 평균 판매가를 구하는 것이다

평균 판매가는 price테이블의 price와  unitssold테이블의 units를 곱하여 units로 나눈것

 

풀이(MYSQL)

select p.product_id, ifnull(round(sum(p.price*u.units)/sum(u.units),2),0) as ' average_price'
from UnitsSold u right join Prices p
on p.product_id = u.product_id
and u.purchase_date between p.start_date and p.end_date
group by p.product_id

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

  1. FROM 절: UnitsSold과 Prices를 Prices의 기준으로 product_id가 같고 판매날짜가 시작과 끝날짜 사이에 있는 경우 조인한다
  2. GROUP BY 절: product_id를 기준으로 그룹화하여
  3. SELECT 절: product_id, p.price*u.units의 합을 u.units의 합으로 나눠주어 평균 가격을 구하고 2번째 자리까지 나타내며, 값이 없을 경우 0을 출력한다 ( product_id가 Prices에만 있는 경우 적용)

해당 문제는 다른 사람 풀이도 거의 비슷한듯

배운점

  • 두 테이블을 조인할때 중복된 id와 다른 시간을 조건으로 할때 조인하는 법을 배우게 되었다.
  • inner조인시 on과 where의 기능은 동일하지만 그외에는on은 조인시에 같이 적용되지만 where은 조인 후 한번 더 필터링하는 방법 같다

https://velog.io/@crosstar1228/SQL-join%ED%95%A0%EB%95%8C-on-%EA%B3%BC-where%EC%9D%98-%EC%B0%A8%EC%9D%B4