[프로그래머스/MySQL] 주문량이 많은 아이스크림들 조회하기

지누초이·2024년 3월 29일

프로그래머스

목록 보기
34/37
post-thumbnail

문제

https://school.programmers.co.kr/learn/courses/30/lessons/133027


노트

특정 맛에 대해, (7월에 판매된 양 + 상반기에 판매된 양)이 큰 순서대로 3가지 맛을 출력하는 문제이다.
JOIN의 특징과 테이블의 속성을 알면 쉽게 풀 수 있는 문제이다.


우선 7월에 판매된 양을 보자.
7월 테이블의 FLAVOR 는 기본키가 아니다.
따라서 FLAVOR 에 같은 맛이 중복될 수 있다.
우선 이 문제를 해결해야한다.

WITH JULY_GROUP AS (
    SELECT
        FLAVOR
        , SUM(TOTAL_ORDER) AS TOTAL_ORDER
    FROM
        JULY
    GROUP BY
        FLAVOR
)

다음으로는 두 테이블을 합치는 것이다.
INNER JOIN 을 하면 상반기에 있는 맛과 7월에 있는 맛 중
공통으로 존재하는 맛만 추출될 것이다.

그리고 한 가지 더 눈여겨봐야할 점은
7월 테이블 FLAVOR 는 상반기 테이블 FLAVOR 의 외래키다.
7월 테이블 FLAVOR 에 있는 모든 맛은 상반기 테이블 FLAVOR 에 있다는 뜻이다.
상반기 테이블 FLAVOR 에 없는 값이 7월 테이블 FLAVOR 에 있는 경우도 없다.
따라서 이 경우에는 상반기 테이블에다가 7월 테이블을 LEFT JOIN 해야한다.
그러면서 총 판매량을 더해주자.

WITH TOTAL_GROUP AS (
    SELECT
        A.FLAVOR
        , A.TOTAL_ORDER + B.TOTAL_ORDER AS TOTAL_ORDER
    FROM
        FIRST_HALF A
    LEFT JOIN
        JULY_GROUP B
    ON
        A.FLAVOR = B.FLAVOR
)

이제 위 TOTAL_GROUP 테이블을 가지고 TOTAL_ORDER 를 기준으로 내림차순하면서 FLAVORLIMIT 3으로 추출하면된다.


추가로 문제 조건과는 다르게
만약 7월 테이블 FLAVOR 에도 상반기 테이블 FLAVOR 에 없는 값이 있을 경우에는 LEFT JOIN 이 아닌 FULL OUTER JOIN 을 해야 할 것이다.


정답

WITH JULY_GROUP AS (
    SELECT
        FLAVOR
        , SUM(TOTAL_ORDER) AS TOTAL_ORDER
    FROM
        JULY
    GROUP BY
        FLAVOR
), TOTAL_GROUP AS (
    SELECT
        A.FLAVOR
        , A.TOTAL_ORDER + B.TOTAL_ORDER AS TOTAL_ORDER
    FROM
        FIRST_HALF A
    LEFT JOIN
        JULY_GROUP B
    ON
        A.FLAVOR = B.FLAVOR
)

SELECT
    FLAVOR
FROM
    TOTAL_GROUP
ORDER BY
    TOTAL_ORDER DESC
LIMIT
    3

더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗

0개의 댓글