출처
문제
각 제품의 평균 판매 가격을 구하는 솔루션을 작성합니다. 소수점 이하 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 ->결과반환
- FROM 절: UnitsSold과 Prices를 Prices의 기준으로 product_id가 같고 판매날짜가 시작과 끝날짜 사이에 있는 경우 조인한다
- GROUP BY 절: product_id를 기준으로 그룹화하여
- SELECT 절: product_id, p.price*u.units의 합을 u.units의 합으로 나눠주어 평균 가격을 구하고 2번째 자리까지 나타내며, 값이 없을 경우 0을 출력한다 ( product_id가 Prices에만 있는 경우 적용)
해당 문제는 다른 사람 풀이도 거의 비슷한듯
배운점
- 두 테이블을 조인할때 중복된 id와 다른 시간을 조건으로 할때 조인하는 법을 배우게 되었다.
- inner조인시 on과 where의 기능은 동일하지만 그외에는on은 조인시에 같이 적용되지만 where은 조인 후 한번 더 필터링하는 방법 같다
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Leet code - Exchange Seats (0) | 2024.07.31 |
---|---|
[문제풀이] Leet code - Friend Requests II: Who Has the Most Friends (0) | 2024.07.24 |
[문제풀이] Leet code - Monthly Transactions I (1) | 2024.07.23 |
[문제풀이] Leet code - Students and Examinations (0) | 2024.07.22 |
[문제풀이] Leet code - Managers with at Least 5 Direct Reports (0) | 2024.07.22 |