RANK() et DENSE_RANK() d'Oracle : recherche du Nième salaire le plus élevé
Cet article explore les différences entre les fonctions RANK()
et DENSE_RANK()
d'Oracle, démontrant leur utilisation pour identifier le nième salaire le plus élevé et gérer les valeurs nulles potentielles.
Compréhension RANK()
et DENSE_RANK()
Les deux fonctions attribuent des classements dans des ensembles de données ordonnés (partitions). La principale différence réside dans leur gestion des cravates :
RANK()
: Attribue le même rang aux valeurs liées, laissant des espaces dans la séquence de classement. Si trois salariés se partagent le deuxième rang, le rang suivant sera le 5.
DENSE_RANK()
: Attribue également le même rang aux valeurs liées, mais sans espaces. Si trois salariés se partagent le deuxième rang, le rang suivant sera le 3.
Extraire le Nième salaire le plus élevé
La requête suivante utilise RANK()
pour trouver le nième salaire le plus élevé :
<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>
Remplacez n
par le rang souhaité (par exemple, 3 pour le troisième salaire le plus élevé). Notez la clause ORDER BY sal DESC
, cruciale pour le classement par ordre décroissant.
Considérations sur les valeurs nulles
Le traitement des valeurs NULL
dépend de la clause ORDER BY
:
ORDER BY sal NULLS FIRST
: NULL
les salaires sont classés en premier.
ORDER BY sal NULLS LAST
: NULL
les salaires sont classés en dernier.
Exemple : Considérons une table avec NULL
salaires. En utilisant NULLS LAST
, une requête sur les trois meilleurs salaires exclurait les employés avec NULL
salaires parmi les trois premiers. A l’inverse, NULLS FIRST
les inclurait, les plaçant potentiellement en tête du classement.
Pour un guide complet et d'autres exemples, veuillez vous référer à cette ressource : Explication détaillée et exemples
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!