집 >데이터 베이스 >MySQL 튜토리얼 >Oracle SQL에서 상위 N개의 가장 높은 값을 효율적으로 검색하려면 어떻게 해야 합니까?
Oracle SQL에서 상위 N개 레코드 추출
열에서 가장 높은 값이나 가장 낮은 값을 가진 특정 수의 행을 가져와야 합니까? RANK()
, DENSE_RANK()
등 오라클의 분석 기능은 효율적인 솔루션을 제공합니다.
예를 들어, 소득이 가장 높은 상위 5명의 직원을 식별하려면 RANK()
:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
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>
가장 좋은 접근 방식은 특정 요구사항에 따라 다릅니다.
ROW_NUMBER()
은 각 행에 고유한 순위를 할당하지만 동점을 임의로 제거하므로 모든 시나리오에 적합하지 않을 수 있습니다.
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
ROWNUM
을 사용한 비분석적 방법이 존재하지만 잠재적인 불일치로 인해 신뢰성이 떨어지고 일반적으로 덜 선호됩니다. 위의 분석 함수 방법은 더욱 강력하고 예측 가능한 결과를 제공합니다.
위 내용은 Oracle SQL에서 상위 N개의 가장 높은 값을 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!