기록

프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기 본문

코딩테스트/SQL

프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기

youngyin 2023. 6. 24. 23:27

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131116#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

비슷한 문제

2023.06.24 - [코딩테스트/SQL] - 프로그래머스_그룹별 조건에 맞는 식당 목록 출력하기

 

RANK() 함수와 DENSE_RANK() 함수

해당 문제에서는 어떤 함수를 사용해도 상관 없지만, 두 함수가 다른 답변들에서 자주 보여서 정리하고 넘어가려고 한다.

 

RANK() 함수는 동일한 순위를 가진 행에 대해 동일한 순위를 할당하고, 그 다음 순위는 건너뛴다. 이는 중복된 순위가 있을 경우에도 다음 순위를 건너뛰고 증가한다.
DENSE_RANK() 함수는 동일한 순위를 가진 행에 대해 동일한 순위를 할당하고, 그 다음 순위를 연속적으로 부여한다. 이는 중복된 순위가 있을 경우에도 다음 순위를 연속적으로 증가한다.

RANK() 함수는 공백이 있는 순위를 반환할 수 있지만, DENSE_RANK() 함수는 연속적인 순위를 반환한다.

코드

SELECT  CATEGORY
        , PRICE
        , PRODUCT_NAME
FROM (
    SELECT CATEGORY
        , PRICE
        , PRODUCT_NAME
        , RANK() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) RANK
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
) 
WHERE RANK = 1
ORDER BY PRICE DESC
 
Comments