코딩테스트_SQL

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

jihye0e 2025. 4. 24. 19:12

[문제]

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

 

[풀이]

1) FLAVOR 조회

2) FIRST_HALF와 JULY 테이블을 조인

3) JULY 테이블은 FLAVOR별로 주문량을 SUM()하여 집계한 뒤 조인

4) 조인 조건은 FLAVOR

    (7월은 주문량이 많아 같은 아이스크림에 대해 서로 다른 두 공장에서 아이스크림 가게로 출하할 수 있는 경우가 있다는 제한이 있다.)

5) 상반기 아이스크림(FIRST_HALF)과 7월(JULY) 아이스크림 총 주문량의 합을 기준으로 내림차순 정렬

6) 상위 3개만 조회

 

[오답 분석]

1) FROM절에서 JOIN

FROM (SELECT TOTAL_ORDER FROM FIRST_HALF) FH 
JOIN (SELECT SUM(TOTAL_ORDER)
     FROM JULY
     GROUP BY FLAVOR) J
ON FH.FLAVOR = J.FLAVOR

** JOIN과 정렬 조건에서 사용하는 컬럼들을 서브쿼리에서 SELECT하지 않아서, 참조 오류가 발생하고 논리적으로도 집계 기준에 맞지 않는다.

- FH 서브쿼리) FLAVOR를 조회하지 않아 조인조건(ON)에서 참조 오류가 발생하였다.

- J 서브쿼리) FLAVOR 컬럼을 조회하지 않았다. > 그룹화의 대상이므로 반드시 포함시켜야 한다.

- SUM만 단독 사용 시 FLAVOR별 합계는 의미가 없을 뿐만 아니라, 정렬 조건으로도 사용이 불가하다.

-> FLAVOR 컬럼을 서브쿼리에서 SELECT한다.

 

[정답]

SELECT J.FLAVOR
FROM FIRST_HALF FH
JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) TOTAL_ORDER
     FROM JULY
     GROUP BY FLAVOR) J
ON FH.FLAVOR = J.FLAVOR
ORDER BY (FH.TOTAL_ORDER + J.TOTAL_ORDER) DESC  -- 내림차순 
LIMIT 3;  -- 3개 조회