Recent Posts
Recent Comments
ღ yuni_world ღ
[MySQL] [프로그래머스 level 4] 주문량이 많은 아이스크림들 조회하기 본문
📌 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/133027
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제풀이
1. UNION ALL 사용
with
raw as (
select * from FIRST_HALF
union all
select * from JULY
)
, raw2 as (
select *, row_number() over(order by total_order desc) as rn
from (select flavor, sum(total_order) as total_order
from raw
group by flavor) as a
)
select flavor
from raw2
where rn <= 3
order by rn
- union all 사용한 이유?
- 데이터 양이 많지 않고 두 테이블의 컬럼명과 형식이 모두 같았기 때문에 join보다 더 간편한 방법이라고 생각
- row_number() 를 사용하여 '상반기+7월 의 아이스크림 총주문량' 에 대한 순서를 부여한 후 where절을 활용하여 상위 3개의 행만 가져옴
2. JOIN 사용
with
raw as (
select *, row_number() over(order by total_order desc) as rn
from (select flavor, sum(a.total_order) + sum(b.total_order) as total_order
from FIRST_HALF a left join JULY b using(flavor)
group by flavor) as a
)
select flavor
from raw
where rn <= 3
order by rn
- left join을 사용한 이유?
- 원래대로면 full outer join 을 활용해야 맞다고 생각하지만 mysql에는 지원되지 않는 형식
- 그렇다면 left join 과 right join, union 을 활용하여 쿼리를 작성해야함
- 하지만 데이터 양이 많지 않고, first_half 테이블의 sample 데이터 양이 더 많았기 때문에 그나마 안전하고 편의상 left join 사용 ( left join 활용해도 정답처리 됨)
- FIRST_HALF, JULY 두 테이블을 조인하는 컬럼명이 FLAVOR로 같기 때문에 using 사용
- row_number() 를 사용하여 '상반기+7월 의 아이스크림 총주문량' 에 대한 순서를 부여한 후 where절을 활용하여 상위 3개의 행만 가져옴
'MySQL > 프로그래머스' 카테고리의 다른 글
| [MySQL] [프로그래머스 level 4] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2025.10.30 |
|---|---|
| [MySQL] [프로그래머스 level 4] 입양 시각 구하기(2) (0) | 2025.10.24 |
| [MySQL] [프로그래머스 level 4] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.10.22 |
| [MySQL] [프로그래머스 level 3] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2025.06.18 |
| [MySQL] [프로그래머스 level 3] 업그레이드 할 수 없는 아이템 구하기 (0) | 2025.06.17 |