주문량이 많은 아이스크림들 조회하기
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- 두 테이블이 서로 다른 FLAVOR를 가지고 있는 경우가 있을 수 있음
- → FULL OUTER JOIN 으로 전부 합쳐서 보고싶은데 MySQL 은 지원하지 않으므로 UNION 사용
- UNION한 테이블을 FLAVOR로 그룹핑하여 SUM()으로 TOTAL_ORDER 구함
- 두 테이블이 서로 다른 FLAVOR를 가지고 있는 경우가 있을 수 있음
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의 FLAVOR는 기본키이기 때문에 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
'코딩테스트 > SQL' 카테고리의 다른 글
| [SQL][DISTINCT][SELF_JOIN] 📍우유와 요거트가 담긴 장바구니 (0) | 2025.06.10 |
|---|---|
| [SQL][ROUND] 서울에 위치한 식당 목록 출력하기 (0) | 2025.06.10 |
| [SQL] 📍 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2025.06.10 |
| [SQL][GROUP BY] 📍 저자 별 카테고리 별 매출액 집계하기 (0) | 2025.06.09 |
| [SQL] 취소되지 않은 진료 예약 조회하기 (0) | 2025.06.09 |