주문량이 많은 아이스크림들 조회하기
풀이
FLAVOR
테이블과 FIRST_HALF
두개의 테이블이 주어지고, 두 테이블 각각의 총 주문량을 더한 값이 가장 큰 상위 3개 구해오기
- JOIN 3 번 써서 구함
1) JULY_SUM
먼저 FLAVOR 로 GROUP BY 하고, SUM(TOTAL_ORDER)
로 맛별 7월 주문량 구함
2) FIRST_HALF 랑 1번 JOIN 해서 각각의 맛별, SUM(상반기 주문량+7월주문량) 구함
- TOP 3 구하는 거니까 ORDER 총주문량 DESC --> LIMIT 3
3) 결과로 TOP 3에 드는 맛을 골라야 하니까 FIRST_HALF
랑 2랑 다시 JOIN, FLAVOR 같은 애들 뽑아서 결과 출력
🙆♀️ 정답풀이
SELECT B.FLAVOR
FROM FIRST_HALF B
JOIN (
SELECT F.FLAVOR,SUM(F.TOTAL_ORDER+A.JULY_SUM) TOTAL
FROM FIRST_HALF F
JOIN (
SELECT FLAVOR,SUM(TOTAL_ORDER) JULY_SUM
FROM JULY
GROUP BY FLAVOR
) A
ON F.FLAVOR=A.FLAVOR
GROUP BY F.FLAVOR
ORDER BY TOTAL DESC
LIMIT 3
) AS C
ON B.FLAVOR=C.FLAVOR;
참고: UNION ALL 사용한 풀이
SELECT FLAVOR
FROM (
SELECT *
FROM FIRST_HALF
UNION ALL
SELECT *
FROM JULY) ICECREAM
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC LIMIT 3
UNION ALL
사용할 수 있는 이유:
두 테이블의 컬럼명, 타입이 똑같음.
- UNION ALL 은 수평 결합, JOIN은 수직결합이다. 그니까 JOIN은 컬럼들이 합쳐진다 생각하면 되고 UNION ALL은 레코드들이 합쳐진다
SELECT * FROM FIRST_HALF UNION ALL SELECT * FROM JULY
: 이 결과로 모든 레코드들이 포함된 테이블이 만들어지고, 여기서 바로 FLAVOR로 그룹핑 한담에 SUM(총주문량)으로 내림차순 정렬, LIMIT 3 으로 TOP 3 뽑으면 끝.
- 만약 테이블 구조가 위처럼 완전히 똑같으면 UNION ALL 생각해보기 !!