코딩테스트/SQL

[SQL][UNION][기본키/외래키] 📍주문량이 많은 아이스크림들 조회하기

박소민 2025. 6. 10. 18:41
주문량이 많은 아이스크림들 조회하기
 

프로그래머스

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

programmers.co.kr

 

 

  • 내 풀이
    • 두 테이블이 서로 다른 FLAVOR를 가지고 있는 경우가 있을 수 있음
      • → FULL OUTER JOIN 으로 전부 합쳐서 보고싶은데 MySQL 은 지원하지 않으므로 UNION 사용
    • UNION한 테이블을 FLAVOR로 그룹핑하여 SUM()으로 TOTAL_ORDER 구함
WITH COMBINED AS 
(SELECT SHIPMENT_ID, FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM ((SELECT *
        FROM FIRST_HALF)
    UNION
        (SELECT *
        FROM JULY)) AS U
GROUP BY FLAVOR
)
SELECT FLAVOR
FROM COMBINED
ORDER BY TOTAL_ORDER DESC
LIMIT 3

 

  • 다른 사람 풀이
    • FIRST_HALF의 FLAVOR기본키이기 때문에 FLAVOR 기준으로 그룹핑이 되어있다
      • JULY의 FLAVOR가 FIRST_HALF라고 지문에서 알려줌
    • JULY 테이블은 아직 FLAVOR 별로 집계되어 있지 않음
      • 출하 번호별로 주문이 다르기 때문에 FLAVOR별로 합쳐야 함
    • JULY에서 먼저 FLAVOR별 주문량 합계를 계산해야 FIRST_HALF와 같은 단위(FLAVOR 단위)로 비교 및 합산 가능
⚠️ FIRST_HALF에는 없지만 JULY에는 있는 FLAVOR를 포함못하지 않나? 라고 생각했는데
FLAVOR가 FIRST_HALF에서 따온 외래키이기 때문에 무조건 FIRST_HALF에 포함되어 있음
SELECT F.FLAVOR
FROM FIRST_HALF F
JOIN (SELECT FLAVOR, sum(TOTAL_ORDER) TOTAL_ORDER
    FROM JULY
    GROUP BY FLAVOR) J
ON F.FLAVOR = J.FLAVOR
ORDER BY F.TOTAL_ORDER + J.TOTAL_ORDER DESC
LIMIT 3