


Rank () vs dense_rank () dans Oracle: en quoi ces fonctions de fenêtre diffèrent-elles dans le classement et la gestion des nuls?
Oracle Rank () et dense_rank (): une analyse comparative des fonctions de fenêtre
Oracle RANK()
et DENSE_RANK()
sont des fonctions de fenêtre utilisées pour attribuer des rangs aux lignes dans une partition spécifiée. Bien que les deux atteignent des objectifs similaires, leur traitement des liens et des valeurs nulles diffère considérablement.
RANK()
Fonction
RANK()
Attribue des classements en fonction de la commande spécifiée. Surtout, il attribue le classement même aux lignes attachées, puis sauts les classements . Par exemple, si trois lignes sont à égalité pour la deuxième place, ils recevront tous un rang de 2, et le prochain rang sera de 5.
DENSE_RANK()
Fonction
Contrairement à RANK()
, DENSE_RANK()
attribue des rangs consécutifs sans lacunes, même avec des liens. Toutes les lignes liées reçoivent le même rang et le rang suivant suit immédiatement. Il n'y a pas de rangs sautés.
Récupération du nème salaire le plus élevé
Pour identifier le nième salaire le plus élevé du tableau emptbl
, vous pouvez utiliser RANK()
ou DENSE_RANK()
dans la clause OVER()
:
SELECT empname, sal FROM ( SELECT empname, sal, RANK() OVER (ORDER BY sal DESC) AS rnk -- Note: ORDER BY sal DESC for nth highest FROM emptbl ) WHERE rnk = n;
Gestion des valeurs nuls
Le traitement des valeurs nulles par les deux fonctions est déterminé par la clause ORDER BY
. Si NULLS FIRST
est spécifié, les nulls sont classés avant les valeurs non nuls; Si NULLS LAST
, ils sont classés après.
Exemple illustratif
Examinons le script suivant:
WITH q AS ( SELECT 10 AS DEPTNO, 'rrr' AS EMPNAME, 10000.00 AS SAL FROM DUAL UNION ALL SELECT 11, 'nnn', 20000.00 FROM DUAL UNION ALL SELECT 11, 'mmm', 5000.00 FROM DUAL UNION ALL SELECT 12, 'kkk', 30000 FROM DUAL UNION ALL SELECT 10, 'fff', 40000 FROM DUAL UNION ALL SELECT 10, 'ddd', 40000 FROM DUAL UNION ALL SELECT 10, 'bbb', 50000 FROM DUAL UNION ALL SELECT 10, 'xxx', NULL FROM DUAL UNION ALL SELECT 10, 'ccc', 50000 FROM DUAL ) SELECT EMPNAME, DEPTNO, 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, DENSE_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL NULLS LAST) AS DR2 FROM q;
Les résultats démontrent clairement le comportement contrastant de RANK()
et DENSE_RANK()
lors de la gestion des valeurs nulles, selon la spécification NULLS FIRST
ou NULLS LAST
dans la clause ORDER BY
. Cet exemple met en évidence l'importance de comprendre ces nuances lors du choix de la fonction de classement appropriée pour vos besoins spécifiques.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
