SQL 알고리즘 코드카타

SQL 알고리즘 코드카타 21일차(3) 26.01.19(월)

nom_de_plume 2026. 1. 19. 10:46

부제:

주문량이 많은 아이스크림들 조회하기, 레벨 5

 

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

2. 정답 코드: 

=> JOIN 활용

SELECT fh.flavor
from first_half as fh
join july as j
    on fh.flavor = j.flavor
group by fh.flavor
order by (fh.total_order + sum(j.total_order)) desc
limit 3

=> 서브쿼리 활용

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


3. 오류 상황:

SELECT flavor
from first_half as fh
where (
    select total_order
    from july as j
    where fh.shipment_id = j.shipment_id
        and fh.shipment_id + j.shipment_id
    group by flavor
    order by total_order desc
    limit 3
)
order by flavor desc

=> 7월 테이블에 동일한 맛 여러번 출하

=> 서브쿼리 오류

=> 집계, 정렬 오류


4. 시도 방법:

=> sum 활용

=> 테이블 연결 기준 컬럼 수정


5. 최종 문제 해결 방법:

=> 상반기 테이블(FIRST_HALF)은 맛(Flavor)이 기본 키(PK)지만, 7월 테이블은 동일한 맛이 여러 번 출하(SHIPMENT_ID가 다름)되어 기록되어 있을 수 있다. 7월 테이블에서 맛별로 주문량을 먼저 합쳐야(SUM) 한다.

=> 상반기 주문량과 7월 주문량을 더해야 하므로, 두 테이블을 맛(FLAVOR)을 기준으로 연결해야 한다. FROM FIRST_HALF AS F JOIN JULY AS J ON F.FLAVOR = J.FLAVOR 구조로 작성.

=> 맛별로 그룹화를 한 뒤, 두 테이블의 주문량 합계를 더한 값으로 정렬