
문제
https://school.programmers.co.kr/learn/courses/30/lessons/133027
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성
- 7월에는 아이스크림 주문량이 많아, 같은 아이스크림에 대하여 서로 다른 두 공장에서 아이스크림 가게로 출하를 진행
이 경우 같은 맛의 아이스크림이라도 다른 출하 번호를 갖게 됨
정답 코드
SELECT F.FLAVOR
FROM FIRST_HALF F JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) AS S_TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR) J ON F.FLAVOR = J.FLAVOR
ORDER BY F.TOTAL_ORDER + J.S_TOTAL_ORDER DESC
LIMIT 3
코드 설명
# 서브쿼리
SELECT FLAVOR, SUM(TOTAL_ORDER) AS S_TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR
- JULY 테이블에서 FLAVOR 별로 총 주문량(TOTAL_ORDER)을 합산
FROM FIRST_HALF F JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) AS S_TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR) J ON F.FLAVOR = J.FLAVOR
- 상반기 주문량(TOTAL_ORDER)과 7월의 주문량(S_TOTAL_ORDER)을 맛(FLAVOR)을 기준으로 합치기
ORDER BY F.TOTAL_ORDER + J.S_TOTAL_ORDER DESC
- FIRST_HALF 테이블의 TOTAL_ORDER(상반기 주문량)와 J 서브쿼리에서 구한 S_TOTAL_ORDER(7월 주문량)을 더한 값을 기준으로 내림차순 정렬 (= 총 주문량이 큰 순서대로 결과를 정렬)
LIMIT 3
- 정렬된 결과 중 상위 3개만 추출 (= 총 주문량이 가장 큰 3개의 맛을 추출)
첫 번째 시도 (오류)
SELECT F.FLAVOR
FROM FIRST_HALF F JOIN JULY J ON F.FLAVOR = J.FLAVOR
GROUP BY FLAVOR
HAVING SUM(J.TOTAL_ORDER) + DISTINCT(F.TOTAL_ORDER)
ORDER BY SUM(J.TOTAL_ORDER) + DISTINCT(F.TOTAL_ORDER) DESC
LIMIT 3
- SUM(J.TOTAL_ORDER) + DISTINCT(F.TOTAL_ORDER) : 문법상 오류
- DISTINCT는 중복된 값을 제거할 때 사용되며, SUM 함수와 함께 직접적으로 사용할 수 없음
두 번째 시도 (정답. 개선 필요)
SELECT F.FLAVOR
FROM FIRST_HALF F JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) S_TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR) J ON F.FLAVOR = J.FLAVOR
GROUP BY F.FLAVOR
ORDER BY F.TOTAL_ORDER + J.S_TOTAL_ORDER DESC
LIMIT 3
- FIRST_HALF 테이블에서 이미 FLAVOR별로 고유 값만 있기 때문에 GROUP BY가 불필요 (JOIN만 해도 괜찮음)
'코딩 테스트 연습 > [프로그래머스][리트코드] MySQL' 카테고리의 다른 글
| [LV.5] GROUP BY > 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (2) | 2025.07.10 |
|---|---|
| [LV.5] GROUP BY > 저자 별 카테고리 별 매출액 집계하기 (3) | 2025.07.09 |
| [LV.5] String, Date > 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (1) | 2025.07.07 |
| [LV.4] 우유와 요거트가 담긴 장바구니 (0) | 2025.07.04 |
| [LV.4] 헤비 유저가 소유한 장소 (0) | 2025.07.03 |