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
Libérer: 2025-01-24 23:56:08
original
935 Les gens l'ont consulté

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>
Copier après la connexion
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>
Copier après la connexion
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>
Copier après la connexion
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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal