Maison > Article > base de données > Une brève discussion sur row_number(), Rank() et dense_rank() dans Oracle
L'article suivant vous parlera de row_number(), Rank() et dense_rank() dans Oracle. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Oracle : row_number(), Rank(), dense_rank()
Syntaxe : ROW_NUMBER( ) OVER();
row_number est très polyvalent. Il est préférable de l'utiliser pour le tri. Il générera un numéro de série pour chaque ligne d'enregistrements interrogés et les triera dans l'ordre. duplication. Remarque Lorsque vous utilisez la fonction row_number, vous devez utiliser la clause over pour sélectionner une colonne à trier afin de générer un numéro de séquence. La fonction
rank est utilisée pour renvoyer le classement de chaque ligne dans la partition de l'ensemble de résultats. Le classement d'une ligne est le nombre de classements précédents de la ligne concernée plus un. En termes simples, la fonction de classement classe les enregistrements interrogés. Différente de la fonction row_number, la fonction de classement prend en compte la situation dans laquelle les valeurs du champ de tri dans la clause over sont les mêmes si la fonction de classement est utilisée pour générer. un numéro de série, le champ de tri dans la clause over Les numéros de série avec la même valeur sont les mêmes. Les numéros de série avec des valeurs de champ différentes dans ce qui suit ignoreront le même numéro de classement et seront classés ensuite. la ligne correspondante plus un peut être comprise comme générant un numéro de séquence basé sur le nombre actuel d'enregistrements. Les enregistrements sont déduits et ainsi de suite. Les fonctions de la fonction
dense_rank sont similaires à la fonction Rank. La fonction dense_rank est continue lors de la génération de numéros de série, tandis que les numéros de série générés par la fonction Rank peuvent être discontinus. Lorsque le même classement apparaît dans la fonction dense_rank, le même numéro de classement ne sera pas ignoré et la valeur du classement suivra la valeur du classement précédent. Au sein de chaque groupe, Rank() est un tri par saut. Lorsqu'il y a deux premières places, la troisième place suivra. Lorsqu'il y a deux premières places, la deuxième place sera toujours suivie.
À propos de Partition by : Le mot-clé Parttion by fait partie de la fonction analytique d'Oracle et est utilisé pour partitionner l'ensemble de résultats. La différence entre elle et la fonction d'agrégation Group by est qu'elle classe uniquement les données d'origine et peut renvoyer plusieurs enregistrements dans un groupe (le nombre d'enregistrements reste inchangé), tandis que Group by agrège les statistiques sur les données d'origine et n'a généralement qu'une seule réponse. Résultats des valeurs statistiques (une par groupe renvoyée).
CONSEILS :
Lors de l'utilisation de Rank Over(), la valeur nulle est la plus grande. Si le champ de tri est nul, cela peut entraîner le classement du champ nul. d'abord, ce qui affectera les résultats du tri.
Cela peut être comme ceci : classement supérieur (partition par ordre de cours par score desc nulls en dernier)
Résumé :
Vous devez faire attention lors de l'utilisation de la fonction de classement Les trois points suivants :
1 La fonction de classement doit avoir une clause OVER.
2. La fonction de classement doit avoir une clause OVER contenant ORDER BY.
3. Le tri au sein du groupe commence à partir de 1.
Tutoriel recommandé : "Tutoriel Oracle"
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!