-- 7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값
-- 큰 순서대로 상위 3개의 맛
-- SELECT FLAVOR, SUM(TOTAL_ORDER)
-- FROM JULY
-- GROUP BY FLAVOR;
-- SELECT FLAVOR, SUM(TOTAL_ORDER)
-- FROM FIRST_HALF
-- GROUP BY FLAVOR;
SELECT FLAVOR
FROM (
SELECT FLAVOR, SUM(TOT_PRICE)
, RANK() OVER (ORDER BY SUM(TOT_PRICE) DESC) AS RESULT
FROM (
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOT_PRICE
FROM JULY
GROUP BY FLAVOR
UNION ALL
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOT_PRICE
FROM FIRST_HALF
GROUP BY FLAVOR
)
GROUP BY FLAVOR
)
WHERE RESULT <= 3;
UNION ALL하면 중복된 행도 생략되지 않고 함께 합쳐진다.
UNION ALL은 두 집합을 더해서 결과를 출력한다. 이때 UNION ALL은 중복되는 값도 전부 다 출력한다.
1. UNION ALL을 통해서 7월 아이스크림, 상반기 아이스크림 주문을 전부 합친다.
2. 합쳐진 테이블에서 GROUP BY를 통해 FLAVOR끼리의 전체 합을 구한다.
3. RANK를 통해 순위를 구한다.
4. 해당 테이블에서 상위 3개를 구한다.
진짜 어렵게 풀었구나
SELECT *
FROM (SELECT A.FLAVOR
FROM FIRST_HALF A, JULY B -- FLAVOR을 기준으로 INNER JOIN
WHERE A.FLAVOR = B.FLAVOR
GROUP BY A.FLAVOR -- 맛별로 그룹화
ORDER BY SUM(A.TOTAL_ORDER + B.TOTAL_ORDER) DESC
)
WHERE ROWNUM <= 3;