Oracle SQL에서 상위 N개의 최고 값 추출
과제: Oracle SQL 쿼리 내의 특정 열에서 가장 높은 값을 포함하는 특정 수의 행을 효율적으로 선택하는 방법은 무엇입니까?
해결책:
최적의 접근 방식은 Oracle의 분석 기능, 특히 RANK()
또는 DENSE_RANK()
:
RANK()
기능 사용:
<code class="language-sql">select * from ( select empno, sal, rank() over (order by sal desc) as rnk from emp ) where rnk <= 5;</code>
이 쿼리는 해당 직원 번호와 함께 상위 5개의 최고 급여를 검색합니다.
DENSE_RANK()
기능 활용:
<code class="language-sql">select * from ( select empno, sal, dense_rank() over (order by sal desc) as rnk from emp ) where rnk <= 5;</code>
DENSE_RANK()
은 여러 행이 동일한 값을 공유할 때 순위 차이를 없애 RANK()
보다 이점을 제공합니다.
중요 고려 사항:
ROW_NUMBER()
분석 함수로도 이를 달성할 수 있지만, RANK()
또는 DENSE_RANK()
는 동점을 더 적절하게 처리하기 때문에 일반적으로 상위 N 값을 선택하는 데 선호됩니다.ROWNUM
의사 열을 독립형 솔루션으로 사용하지 마세요. 절 전에ORDER BY
적용하면 부정확한 결과가 발생할 수 있습니다.위 내용은 Oracle SQL에서 상위 N개의 가장 높은 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!