Maison >base de données >tutoriel mysql >Quelles sont les différences entre les fonctions RANK() et DENSE_RANK() d'Oracle, et comment gèrent-elles les valeurs nulles ?

Quelles sont les différences entre les fonctions RANK() et DENSE_RANK() d'Oracle, et comment gèrent-elles les valeurs nulles ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-24 23:56:08946parcourir

What are the differences between Oracle's RANK() and DENSE_RANK() functions, and how do they handle null values?

dans -depth Discussion of Oracle's Rank () et dense_rank () Fonctions

Dans le domaine de l'analyse et du tri des données, Oracle fournit deux fonctions très différentes: Rank () et dense_rank (), qui a chacune des utilisations spécifiques. Cet article explorera les différences subtiles entre ces deux fonctions et leurs scénarios d'application.

rang () et dense_rank () Comparez

La fonction rank () est allouée comme une ligne de la ligne en fonction de l'ordre spécifié, tandis que la fonction dense_rank () alloue des niveaux continus. Par exemple, considérez la scène suivante:

Dans cet exemple, bien que le salaire de RRR et NNN soit le même, la fonction Rank () alloue le même niveau (2) pour eux, et la fonction dense_rank () alloue les niveaux continus pour s'assurer qu'il n'y a pas de niveau de saut.
<code class="language-sql">SELECT empname, sal, RANK() OVER (ORDER BY sal) AS r, DENSE_RANK() OVER (ORDER BY sal) AS dr
FROM emptbl;</code>
Empname Sal r dr
rrr 10000 2 2
nnn 20000 3 3
mmm 5000 1 1
kkk 30000 4 4
fff 40000 5 5
ddd 40000 5 5
bbb 50000 7 6
ccc 50000 7 6
Trouver le salaire n

Pour trouver le salaire N dans le tableau (par exemple, le troisième salaire élevé), vous pouvez utiliser les demandes suivantes:

Le traitement de la valeur vide

Le comportement de
<code class="language-sql">SELECT sal FROM emptbl ORDER BY sal DESC LIMIT n-1, 1;</code>
rank () et dense_rank () dépend du fait que les nulls d'abord ou nulls dernier sont spécifiés dans la clause Order Order by. Par exemple, considérez les tables suivantes qui contiennent le salaire de la valeur de l'air:

Dans ce cas, la valeur vide est considérée comme ayant le niveau minimum (NULLS en premier), résultant en différents niveaux par rapport au niveau le plus élevé (NULLS LAST).

Conclusion
<code class="language-sql">SELECT empname, sal, RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS r, DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal NULLS FIRST) AS dr1
FROM emptbl;</code>
Empname Sal r dr1
fff 40000 1 1
ddd 40000 1 1
rrr 10000 3 2
xxx NULL 2 3

Les fonctions Rank () et dense_Rank () d'Oracle fournissent deux méthodes de tri différentes de données. Comprendre leurs différences et leur utilisation appropriée, peuvent effectuer efficacement l'analyse des données et les tâches de fonctionnement.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn