집 >데이터 베이스 >MySQL 튜토리얼 >Oracle SQL 열에서 상위 5개의 가장 높은 값을 검색하는 방법은 무엇입니까?
Oracle SQL 열에서 가장 높은 값 상위 5개 추출
이 가이드에서는 Oracle SQL 데이터베이스 내의 특정 열에서 가장 높은 상위 5개 값을 효율적으로 검색하는 방법을 보여줍니다. 분석 기능과 비분석적 방법을 사용하는 여러 가지 접근 방식을 살펴보겠습니다.
분석기능을 활용한 방법:
RANK()
, DENSE_RANK()
및 ROW_NUMBER()
함수는 열 값을 기준으로 행 순위를 지정하는 강력한 방법을 제공합니다.
1. RANK() 사용:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
RANK()
함수는 급여 내림차순(sal
)에 따라 순위를 지정합니다. 급여가 동일한 행은 동일한 순위를 받게 되므로 순위 순서에 차이가 발생합니다.
2. 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()
과 유사하지만, 동률인 경우에도 간격 없이 연속 순위를 부여합니다.
3. 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>
ROW_NUMBER()
은 지정된 순서에 따라 각 행에 고유한 순위를 할당합니다. 일부 행을 임의로 제외할 수 있으므로 동점에 주의하세요.
비분석적 접근 방식(ROWNUM 사용):
더 간단하지만 덜 강력한 방법은 ROWNUM
:
<code class="language-sql">SELECT * FROM emp WHERE ROWNUM <= 5 ORDER BY sal DESC;</code>
이 접근 방식은 급여를 기준으로 데이터를 정렬한 다음 결과 집합을 처음 5개 행으로 제한합니다. 그러나 ROWNUM
은 절 앞ORDER BY
에 적용되므로 급여 값에 동률이 있는 경우 잘못된 결과가 발생할 수 있습니다. 이 방법은 일반적으로 분석 함수 접근 방식보다 신뢰성이 떨어집니다. 따라서 정확하고 일관된 결과를 얻으려면 RANK()
, DENSE_RANK()
또는 ROW_NUMBER()
을 사용하는 것이 좋습니다.
위 내용은 Oracle SQL 열에서 상위 5개의 가장 높은 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!