기존 제출 코드
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 |