Lv4. 주문량이 많은 아이스크림들 조회하기 (MySQL)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/133027
내가 작성한 코드
SELECT F.FLAVOR
FROM FIRST_HALF F
JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) JULY_SUM
FROM JULY
GROUP BY FLAVOR) J
ON F.FLAVOR = J.FLAVOR
ORDER BY (F.TOTAL_ORDER + J.JULY_SUM) DESC
LIMIT 3;
새로 배운 코드
SELECT FLAVOR
FROM (SELECT FLAVOR, TOTAL_ORDER
FROM FIRST_HALF
UNION ALL
SELECT FLAVOR, TOTAL_ORDER
FROM JULY) AS C
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC
LIMIT 3;
문제 회고
1. WHERE FLAVOR = (서브쿼리) 로 작성
- 위 방식으로 작성을 해서 오류가 발생
- 틀린 이유:
- WHERE절은 특정 조건에 맞는 행을 필터링 할 때 사용한다
- 하지만 위 문제는 두 테이블의 수치를 더해서 비교해야 하므로 필터링이 적합하지 않다
- 해결 방법:
- JOIN 방식 활용
- JOIN 방식은 FIRST_HALF 테이블의 행 옆에 JULY의 집계 테이블을 수평으로 결합하므로,
한 행에서 F.TOTAL_ORDER 과 J.JULY_SUM 라는 두 컬럼을 동시에 참조하여 덧셈 연산이 가능하다
2. UNION ALL
- UNION ALL은 두 테이블의 데이터를 수직으로 통합한다
- UNOIN과 달리 중복 제거 과정을 거치지 않고, 7월에 여러 번 출하된 동일한 맛의 주문량도 누락 없이 모두 보존하여
SUM() 집계에 포함할 수 있다
'코딩테스트' 카테고리의 다른 글
| [26.03.23 코테/회고(MySQL/Oracle)]-년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2026.03.23 |
|---|---|
| [26.03.20 코테/회고(MySQL)]-업그레이드 할 수 없는 아이템 구하기 (0) | 2026.03.20 |
| [26.03.18 코테/회고(MySQL)]-즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2026.03.18 |
| [26.03.17 코테/회고(MySQL/Oracle)]-그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2026.03.17 |
| [26.03.16 코테/회고(MySQL/Oracle)]-자동차 대여 기록 별 대여 금액 구하기 (0) | 2026.03.16 |