코딩테스트_SQL
250424 프로그래머스 주문량이 많은 아이스크림들 조회하기
jihye0e
2025. 4. 24. 19:12
[문제]
7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.
[풀이]
1) FLAVOR 조회
2) FIRST_HALF와 JULY 테이블을 조인
3) JULY 테이블은 FLAVOR별로 주문량을 SUM()하여 집계한 뒤 조인
4) 조인 조건은 FLAVOR
(7월은 주문량이 많아 같은 아이스크림에 대해 서로 다른 두 공장에서 아이스크림 가게로 출하할 수 있는 경우가 있다는 제한이 있다.)
5) 상반기 아이스크림(FIRST_HALF)과 7월(JULY) 아이스크림 총 주문량의 합을 기준으로 내림차순 정렬
6) 상위 3개만 조회
[오답 분석]
1) FROM절에서 JOIN
FROM (SELECT TOTAL_ORDER FROM FIRST_HALF) FH
JOIN (SELECT SUM(TOTAL_ORDER)
FROM JULY
GROUP BY FLAVOR) J
ON FH.FLAVOR = J.FLAVOR
** JOIN과 정렬 조건에서 사용하는 컬럼들을 서브쿼리에서 SELECT하지 않아서, 참조 오류가 발생하고 논리적으로도 집계 기준에 맞지 않는다.
- FH 서브쿼리) FLAVOR를 조회하지 않아 조인조건(ON)에서 참조 오류가 발생하였다.
- J 서브쿼리) FLAVOR 컬럼을 조회하지 않았다. > 그룹화의 대상이므로 반드시 포함시켜야 한다.
- SUM만 단독 사용 시 FLAVOR별 합계는 의미가 없을 뿐만 아니라, 정렬 조건으로도 사용이 불가하다.
-> FLAVOR 컬럼을 서브쿼리에서 SELECT한다.
[정답]
SELECT J.FLAVOR
FROM FIRST_HALF FH
JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR) J
ON FH.FLAVOR = J.FLAVOR
ORDER BY (FH.TOTAL_ORDER + J.TOTAL_ORDER) DESC -- 내림차순
LIMIT 3; -- 3개 조회