https://school.programmers.co.kr/learn/courses/30/lessons/133027
코드설명
LEFT OUTER JOIN + GROUP BY + SUM + LIMIT 를 활용합니다.
문제에서 JULY 테이블에 새로운 FLAVOR가 존재할경우는 FULL OUTER JOIN으로 처리해야만 할 것 입니다.
하지만, 이 문제의 경우 JULY테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키입니다. 라는 조건이 있으므로 LEFT OUTER JOIN으로 FIRST_HALF 테이블만 검사하면 됩니다.
코드
SELECT FH.FLAVOR
FROM FIRST_HALF AS FH
LEFT OUTER JOIN JULY AS J
ON FH.FLAVOR = J.FLAVOR
GROUP BY FH.SHIPMENT_ID
ORDER BY SUM(FH.TOTAL_ORDER + J.TOTAL_ORDER) DESC
LIMIT 3
ORACLE
UNION을 활용한 코드입니다.
SELECT FLAVOR
FROM (SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM
(SELECT *
FROM FIRST_HALF
UNION
SELECT *
FROM JULY)
GROUP BY FLAVOR
ORDER BY TOTAL_ORDER DESC )
WHERE ROWNUM <= 3
해당 테이블에서 다른 컬럼에 있는 데이터라도 SUM(FH.TOTAL_ORDER + J.TOTAL_ORDER)로 더한 값을 구할 수 있습니다.
SELECT FLAVOR FROM
(SELECT FH.FLAVOR
FROM FIRST_HALF FH
LEFT OUTER JOIN JULY J
ON FH.FLAVOR = J.FLAVOR
GROUP BY FH.FLAVOR
ORDER BY SUM(FH.TOTAL_ORDER + J.TOTAL_ORDER) DESC )
WHERE ROWNUM <= 3