코딩테스트

[26.03.19 코테/회고(MySQL)]-주문량이 많은 아이스크림 조회하기

지니248 2026. 3. 19. 16:17

Lv4. 주문량이 많은 아이스크림들 조회하기 (MySQL)

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

 

내가 작성한 코드

SELECT F.FLAVOR
FROM FIRST_HALF F
JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) JULY_SUM
      FROM JULY
      GROUP BY FLAVOR) J
  ON F.FLAVOR = J.FLAVOR
ORDER BY (F.TOTAL_ORDER + J.JULY_SUM) DESC
LIMIT 3;

 

새로 배운 코드

SELECT FLAVOR
FROM (SELECT FLAVOR, TOTAL_ORDER
      FROM FIRST_HALF
      UNION ALL
      SELECT FLAVOR, TOTAL_ORDER
      FROM JULY) AS C
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC
LIMIT 3;

문제 회고

1. WHERE FLAVOR = (서브쿼리) 로 작성

- 위 방식으로 작성을 해서 오류가 발생

- 틀린 이유:

   - WHERE절은 특정 조건에 맞는 행을 필터링 할 때 사용한다

   - 하지만 위 문제는 두 테이블의 수치를 더해서 비교해야 하므로 필터링이 적합하지 않다

- 해결 방법:

   - JOIN 방식 활용

   - JOIN 방식은 FIRST_HALF 테이블의 행 옆에 JULY의 집계 테이블을 수평으로 결합하므로,

     한 행에서 F.TOTAL_ORDER 과 J.JULY_SUM 라는 두 컬럼을 동시에 참조하여 덧셈 연산이 가능하다

2. UNION ALL

- UNION ALL은 두 테이블의 데이터를 수직으로 통합한다

- UNOIN과 달리 중복 제거 과정을 거치지 않고, 7월에 여러 번 출하된 동일한 맛의 주문량도 누락 없이 모두 보존하여

  SUM() 집계에 포함할 수 있다