오라클의 RANK() 및 DENSE_RANK(): N번째 최고 연봉 찾기
이 기사에서는 Oracle의 RANK()
및 DENSE_RANK()
함수 간의 차이점을 살펴보고 n번째 최고 급여를 식별하고 잠재적인 null 값을 처리하는 데 사용되는 방법을 보여줍니다.
RANK()
과 DENSE_RANK()
두 함수 모두 순서가 지정된 데이터 세트(파티션) 내에서 순위를 할당합니다. 주요 차이점은 관계 처리에 있습니다.
RANK()
: 동점 값에 동일한 순위를 할당하여 순위 순서에 간격을 둡니다. 3명의 직원이 2위를 공유할 경우 다음 순위는 5위가 됩니다.
DENSE_RANK()
: 또한 동일한 순위를 동일한 값에 할당하지만 공백은 없습니다. 3명의 직원이 2위를 공유할 경우 다음 순위는 3위가 됩니다.
N번째 최고 연봉 추출
다음 쿼리는 RANK()
을 사용하여 n번째로 높은 급여를 찾습니다.
<code class="language-sql">SELECT * FROM ( SELECT emp.*, RANK() OVER (ORDER BY sal DESC) as salary_rank FROM emptbl emp ) ranked_salaries WHERE salary_rank = n;</code>
n
을 원하는 순위로 바꿉니다(예: 세 번째로 높은 급여는 3). 내림차순 순위에 중요한 ORDER BY sal DESC
절에 주목하세요.
Null 값 고려 사항
NULL
값의 처리는 ORDER BY
절에 따라 다릅니다.
ORDER BY sal NULLS FIRST
: NULL
급여가 1위입니다.
ORDER BY sal NULLS LAST
: NULL
급여가 맨 마지막에 랭크됩니다.
예: NULL
급여가 포함된 테이블을 생각해 보세요. NULLS LAST
를 사용하면 상위 3개 급여에 대한 쿼리는 상위 3개에서 NULL
급여를 받는 직원을 제외합니다. 반대로 NULLS FIRST
에는 해당 항목이 포함되어 잠재적으로 순위의 최상위에 올 수 있습니다.
포괄적인 가이드와 추가 예를 보려면 자세한 설명 및 예
리소스를 참조하세요.위 내용은 Oracle의 Rank () vs. Dense_Rank () : Nth 급여를 찾고 NULL 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!