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

박신희·2026년 2월 28일

[풀이] 프로그래머스

목록 보기
34/35
post-thumbnail

📌 풀이과정

  • FIRST_HALF : 상반기 주문 정보 (PK : FLAVOR, FK : SHIPMENT_ID)
  • JULY : 7월의 아이스크림 주문 정보 (PK : SHIPMENT_ID FK : FLAVOR)

조인 칼럼 : FLAVOR
FIRST_HALF와 JULY에 대한 서브쿼리 각각 조회 후, 추출해야하는 컬럼인 FLAVOR를 기준으로 조인
그 다음 ROWNUM을 사용해 3개만 추출

ps. 풀이코드1으로 풀고나서, 두 테이블의 컬럼들을 보니 형식이 같은걸 보고 UNION ALL 까지 생각하긴 했는데,, 이렇게 배워가는거지!

🤜 풀이코드1

SELECT FLAVOR 
  FROM (
        SELECT A.FLAVOR, A.T_O+B.T_O AS TOT
          FROM (SELECT FLAVOR, SUM(TOTAL_ORDER) AS T_O
                  FROM FIRST_HALF
              GROUP BY FLAVOR) A
              , (SELECT FLAVOR, SUM(TOTAL_ORDER) AS T_O
                   FROM JULY
              GROUP BY FLAVOR) B
         WHERE A.FLAVOR = B.FLAVOR
        ORDER BY TOT DESC
       )
WHERE ROWNUM<=3

🤜 풀이코드2 (with Gemini)

SELECT FLAVOR 
FROM (
        SELECT FLAVOR
        FROM (
                SELECT FLAVOR, TOTAL_ORDER
                  FROM FIRST_HALF
                UNION ALL 
                SELECT FLAVOR, TOTAL_ORDER
                  FROM JULY
             )
        GROUP BY FLAVOR
        ORDER BY SUM(TOTAL_ORDER) DESC
	 ) 
WHERE ROWNUM <=3;

💬 이 문제의 핵심은 "두 테이블의 데이터를 합쳐서 총합을 구하는 것" 입니다.
이렇게 두 테이블의 구조(맛, 주문량)가 같고 단순히 더하기만 하면 될 때는, 양옆으로 연결하는 조인(JOIN)보다 위아래로 데이터를 먼저 이어 붙이는 UNION ALL이 훨씬 직관적이고 효율적입니다.

  • 장점: 서브쿼리가 확 줄어들고 코드가 훨씬 짧아집니다. DB 엔진 입장에서도 복잡한 조인 연산 없이 데이터를 수직으로 합친 뒤 한 번만 GROUP BY를 하면 되기 때문에 성능 면에서 유리한 경우가 많습니다.

✒️ TIL

UNION vs UNION ALL
UNION : 중복 불가 (합집합 개념)
UNION ALL : 중복 가능 (UNION보다 성능 좋음)

profile
log my moments 'u')/

0개의 댓글