문제
7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.
on FIRST_HALF. SHIPMENT_ID = JULY. SHIPMENT_ID
on절을 잘못 매칭해서 틀렸다.
shipment_id 는 출하 번호인데 문제를 보면 '서로 다른 두 공장에서 아이스크림 가게로 출하를 진행하는 경우가 있습니다. 이 경우 같은 맛의 아이스크림이라도 다른 출하 번호를 갖게 됩니다.' 라고 한다.
같은 맛을 이어도 다른 출하번호를 갖게 돼서 shipment_id 로 join 하면 데이터를 놓칠 수 있다. 이 부분을 고려하여 문제에서는 총 주문량을 구해야하니까 '아이스크림 맛'을 기준으로 테이블을 만들어야한다.
아래를 보면 shipment_id 를 기준으로 하면109번 출하량과 맛은 같아도 다른 출하량을 가진 209번을 놓치게 된다.
SELECT *
from FIRST_HALF
join JULY
on FIRST_HALF.SHIPMENT_ID = JULY.SHIPMENT_ID

FLAVOR 로 했을 때는 109번과 209가 잘 join 되었다.
SELECT *
from FIRST_HALF
join JULY
on FIRST_HALF.FLAVOR = JULY.FLAVOR

정답
SELECT FIRST_HALF.FLAVOR
from FIRST_HALF
join JULY
on FIRST_HALF.FLAVOR = JULY.FLAVOR
group by FIRST_HALF.FLAVOR
order by sum(JULY.TOTAL_ORDER+FIRST_HALF.TOTAL_ORDER) desc
limit 3
틀린답인데 first_half으로 left_join으로 하면 누락된 데이터가 존재해서 오답이 된다. left join을 할거라면 july 로 해야한다.
SELECT JULY.FLAVOR
from JULY
left join FIRST_HALF
on FIRST_HALF.SHIPMENT_ID=JULY.SHIPMENT_ID
group by FLAVOR
having sum(JULY.TOTAL_ORDER+FIRST_HALF.TOTAL_ORDER) as SUM_TOTAL_ORDER
order by SUM_TOTAL_ORDER desc
limit 3
이것도 에러 나는데 having 절에 집계함수 써서 그런듯
select *
from JULY
left join FIRST_HALF
on FIRST_HALF.FLAVOR=JULY.FLAVOR
group by FIRST_HALF.FLAVOR
order by sum(JULY.TOTAL_ORDER+FIRST_HALF.TOTAL_ORDER) desc
limit 3
이건 정답인데 select * 했을때

select *
from JULY
left join FIRST_HALF
on FIRST_HALF.SHIPMENT_ID=JULY.SHIPMENT_ID
group by FIRST_HALF.FLAVOR
order by sum(JULY.TOTAL_ORDER+FIRST_HALF.TOTAL_ORDER) desc
limit 3
이건 틀린답

strawberry 의 다른 출하번호가 제대로 반영되지 않고 누락돼서 순위가 다른 것 같다.
group by 만 제대로 하면 되는 줄 알았는데 on 절에서부터 하지 않으면 group by 에서 누락될 수 있다는 것을 배웠다.
그리고 집계함수를 order by 에서 사용할 수 있다는 것을 알았다.
'SQL' 카테고리의 다른 글
| SQL 프로그래머스 131117 5월 식품들의 총매출 조회하기 (0) | 2024.01.20 |
|---|---|
| SQL 프로그래머스 59045 보호소에서 중성화한 동물 (0) | 2024.01.20 |
| SQL 프로그래머스 59043 있었는데요 없었습니다 (0) | 2024.01.20 |
| SQL 프로그래머스 59042 없어진 기록 찾기 (0) | 2024.01.19 |
| SQL 프로그래머스 144854 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2024.01.19 |