코딩테스트/SQL
프로그래머스_식품분류별 가장 비싼 식품의 정보 조회하기
zyin
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