EASY INNER JOIN 관련 average-selling-price 연습문제
선생님 이 문제에 대해서
and p.start_date <= u.purchase_date
and u.purchase_date <= p.end_date
이 부분을 왜 조건을 달아줘야 하는지 궁금합니다.
따로 문제에 명시되지 않은거같은데.. 확인부탁드립니다!
select p.product_id ,
round(sum(u.units*p.price)/sum(u.units), 2) average_price
from Prices p
inner join
UnitsSold u
on p.product_id=u.product_id
and p.start_date <= u.purchase_date
and u.purchase_date <= p.end_date
group by p.product_id;
답변 1
0
합격가자님, 안녕하세요.
숙제도 열심히 풀고 계시군요! 빠른 속도로 실력이 향상하실 듯하네요:)
혹시 아래 설명 보고 이해 안가시면, 편하게 추가 질문 부탁드립니다~
Prices 테이블의 price 컬럼, UnitsSold테이블의 unit 컬럼을 이용하기 때문에, 두 테이블을 이어줘야합니다. 그래서 공통적으로 들어있는 product_id 컬럼으로 이어줄 것입니다.
먼저 product_id 컬럼으로만 이어준 결과를 확인해봅시다.
첫번째 행 purchase_date='2019-02-25' 주문에 대해서, start_date='2019-03-01'와 end_date='2019-03-22' 사이에 들어있지 않으므로, 해당 row는 제외되어야 합니다.

그래서 purchase_date가 start_date와 end_date 사이에 있는 row만 사용하기 위해서 아래와 같은 조건이 필요합니다.
and p.start_date <= u.purchase_date
and u.purchase_date <= p.end_date
현재 강의 버전처럼 이 조건을 ON에 추가해도 되구요. (하나는 p 테이블, 하나는 u 테이블에 있으니까 조인 조건이라고 볼 수 있습니다) 이게 헷갈린다면 WHERE 조건에 추가해도 됩니다.
# [MYSQL1 - WHERE에 purchase_date 조건 추가]
select p.product_id,
round(sum(u.units*p.price)/sum(u.units), 2) average_price
from Prices p
inner join UnitsSold u
on p.product_id=u.product_id
where p.start_date <= u.purchase_date
and u.purchase_date <= p.end_date
group by p.product_id;
GROUP BY, HAVING 실습 1번문제
1
6
2
4 - A
0
7
1
코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의
0
14
1
수업에서 사용하는 툴 질문드려요
0
22
2
태어난김에 세계일주 시간 초과
0
16
1
2강에 파일 어디있을까여,,
0
15
2
커리큘럼 중 정렬 관련 질문
0
14
1
다음 강의는 언제쯤 나올까요?
0
18
1
코딩살구클럽 입장이 안됩니다
0
46
2
땃지님 실습소 DB서버 확인 부탁드립니다
0
18
1
문제 링크 변경
0
59
2
SQL 파일 다운로드
0
69
2
workbench 테이블 생성
0
279
2
sql 코딩 테스트에서 index 생성 가능 여부
1
286
2
cross join, full join강의 / leetcode 1280번 문제 질문드립니다
1
303
1
not In강의 / leetcode 1978 질문 드립니다
2
200
1
LEETCODE - Sales Analysis 3 코드 질문드립니다.
1
281
1
[The Latest Login in 2020] datetime 계산 관련
1
251
1
[Average Selling Price] 문제 테스트케이스 실패
1
283
3
서브쿼리 질문
1
350
1
INNER JOIN 강의 질문
1
329
2
문제 주소 링크
1
302
2
work bench 설치관련 문의
1
282
2
깃헙 데스크탑, MYSQL 워크벤치 연동
2
865
3





