오늘은 여기까지

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

Problem Solving

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

dev-99 2025. 1. 4. 22:00

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 7월의 아이스크림 주문 정보를 담은 JULY 테이블입니다.

 

FIRST_HALF

NAME TYPE  NULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

 

JULY

NAME TYPE  NULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

 

7월에는 아이스크림 주문량이 많아 같은 아이스크림에 대하여 서로 다른 두 공장에서 아이스크림 가게로 출하를 진행하는 경우가 있습니다. 이 경우 같은 맛의 아이스크림이라도 다른 출하 번호를 갖게 됩니다.

 

7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.


풀이

SELECT A.FLAVOR
FROM (
    SELECT * FROM FIRST_HALF
    UNION
    SELECT * FROM JULY
) AS A
GROUP BY A.FLAVOR
ORDER BY SUM(A.TOTAL_ORDER) DESC
LIMIT 3

 

MySQL은 full outer join을 지원하지 않는다는 사실을 새로 알게 됐다,,

UNION이나 서브쿼리 없이도 풀 수 있다.

SELECT A.FLAVOR
FROM FIRST_HALF A
JOIN JULY B
ON A.FLAVOR = B.FLAVOR
GROUP BY A.FLAVOR
ORDER BY A.TOTAL_ORDER + SUM(B.TOTAL_ORDER) DESC
LIMIT 3