본문 바로가기

TIL

240709 TIL (join과 관련하여)

 

기존 제출 코드

select  a.PRODUCT_ID,
        a.PRODUCT_NAME,
        a.TOTAL_SALES
from
(
select  p.product_id,
        p.product_name,
        sum(p.price) * sum(o.amount) TOTAL_SALES,
        date_format(o.produce_date,'%y-%m') bbb
from food_product p right join food_order o on p.product_id=o.product_id
group by product_id
) a
where a.bbb='22-05'
order by a.TOTAL_SALES desc, a.product_id;

 

일단 sum(p.price) 부터 틀림

 

튜터와 질의를 통해 알게된점.

 

 

1. join 을 할때는 left 인지 inner 인지 right 인지 왜 그렇게 했는지 근거가 필요하다.

해당 문제의 경우 매출액이 발생한것이 필요하므로 매출액이 발생되지 않는 행은 필요가 없다.

그러므로 양쪽 테이블에 product_id 가 모두 존재하는것이 필요하기 때문에

 

inner join 을 사용한다.

 

2.굳이 서브 쿼리를 사용하지 않아도 된다.

select  p.product_id,
        p.product_name,
        p.price * sum(o.amount) TOTAL_SALES
from food_product p inner join food_order o on p.product_id=o.product_id
and substring(o.produce_date, 1, 7) = '2022-05'
group by product_id
order by 3 desc, 1;

 

이것이 제출한 답안지 인데 굳이 서브쿼리로 돌리지 않고

 

join을 할때 조건을 product_id 같은거 가져오고 produce_date가 22년 5월인것만 가져와 이렇게 조건을 주면

굳이 먼길을 돌아가지 않아도 되었다.

 

그리고 group by 나 order by 사용지 DB 약어가 헷갈리거나 그럴수 있을때

그냥 1, 2, 3 이렇게 처리하면 오히려 더 깔끔하다.

 

 

 

반성

오늘은 전반적으로 계획한것 대비 달성한것이 적은 편이다.

남은 목금은 달성하지 못한 계획을 수행하느쪽으로 진행 해야겠다.

'TIL' 카테고리의 다른 글

240712 TIL  (0) 2024.07.12
240711 TIL  (0) 2024.07.11
20240709 TIL  (0) 2024.07.09
240708 TIL (partition by)  (0) 2024.07.08
240705 TIL (데이터분석 종합반)  (0) 2024.07.05