SQL 알고리즘 코드카타

SQL 알고리즘 코드카타 17일차(1) 26.01.15(목)

nom_de_plume 2026. 1. 15. 09:57

부제:

식품분류별 가장 비싼 식품의 정보 조회하기, 레벨 3

 

1. 문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/131116
2. 정답 코드: 

=> 서브쿼리 활용

SELECT
    category,
    price as max_price,
    product_name
from food_product
where (category, price) in (
        select
            category,
            max(price) as max_price
        from food_product
        where category in ('과자','국','김치','식용유')
        group by category
    )
order by max_price desc

=> 윈도우 함수(Window Function) 활용

select
    category,
    price as max_price,
    product_name
from (
select
    category,
    price,
    product_name,
    rank() over (partition by category order by price desc) as rnk
from food_product
where category in ('과자','국','김치','식용유')
) food
where rnk=1
order by max_price desc


3. 오류 상황:

SELECT
    category,
    max(price) as max_price,
    product_name
from food_product
where category in ('과자','국','김치','식용유')
group by category
order by max_price desc

=> 서브쿼리 미활용

 

4. 시도 방법: 서브쿼리 활용

5. 최종 문제 해결 방법:

=>가장 비싼 가격을 먼저 구한 뒤, 그 카테고리가 동시에 일치하는 행을 전체 테이블에서 다시 찾아내는 방식을 서브쿼리를 활용해서 구현

=> 윈도우함수를 활용해 카테고리별로 가격 순위를 매긴 후, 순위가 1위인 데이터만 필터링