La fonction de numéro de ligne est l'une des fonctions de fenêtre utilisées pour attribuer le numéro de ligne aux lignes de chacune des partitions dans l'ordre dans lequel elles ont été triées dans la partition à l'aide du CLOISON clause, PARTITION uniquement le COMMANDE La clause peut être utilisée dans la clause OVER dans ce cas, la table entière sera considérée comme une seule partition. Mais la clause ORDER BY est obligatoire pour utiliser le ROW_NUMBER() fonction car elle organise les lignes dans les partitions dans cet ordre logique et plus tard, la fonction ROW_NUMBER() peut attribuer le numéro de ligne. Dans chaque partition, le numéro de ligne commence à 1.
Syntaxe:
ROW_NUMBER ( )
OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC ou DESC) AS nom_colonne
Composants de la fonction ROW_NUMBER()
- PARTITION PAR : Il s'agit du sous-paragraphe principal qui partitionne les lignes en fenêtres et pour chaque ligne, les valeurs de fonctions de fenêtre appliqué sera calculé.
- COMMANDÉ PAR: Ceci est utilisé pour classer les lignes de la partition, par défaut c'est l'ordre croissant. Sans la clause ORDER BY, la fonction ROW_NUMBER() ne fonctionne pas.
- Type de retour : Le type de retour de la fonction ROW_NUMBER() est BIGINT.
Utilisation de la fonction ROW_NUMBER()
Étape 1: Créez la base de données Geeksforgeeks en utilisant la requête SQL suivante :
Requête
CREATE DATABASE Geeksforgeeks>
Utilisez la base de données GFG.
Requête
USE techcodeview.com>
Étape 3: Créez un tableau avec les étudiants des différentes sections avec leurs notes totales sur 500.
Requête
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
Étape 4: Insérez les lignes dans le tableau :
Requête
INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368), (5, 'Geek15','C',295), (6, 'Geek16','C',495);>
Étape 5 : Vérifiez le tableau
SELECT * FROM studentsSectionWise>
Sortir:

table SectionWise des étudiants
tutoriel de swing java
Utilisation de la clause ORDER_BY avec la fonction ROW_NUMBER()
Utiliser simplement la clause ORDER BY avec un ordre croissant ou décroissant considère la table entière comme une seule partition.
Vérifions le RankNumber des étudiants en utilisant la fonction ROW_NUMBER() avec la clause ORDER BY incluant toutes les sections :
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Explication: Dans la requête, nous avons utilisé la clause ORDER BY avec les StudentsMarks qui sont classés dans l'ordre DESC.
Sortir:

Sortir
Explication: Dans le résultat, nous pouvons voir que la table entière est considérée comme une seule partition et que le numéro RankNumber est dans l'ordre croissant avec les étudiantsMarks dans l'ordre décroissant.
Utilisation de PARTITION_BY avec la fonction ROW_NUMBER()
En utilisant simplement la clause PARTITION BY, vous divisez et la table en différentes partitions en fonction du nom de la colonne, puis la clause ORDER BY avec ordre croissant ou décroissant considère la table entière comme une seule partition. Et puis ROW_NUMBER() fonctionne avec chaque numéro unique à partir de 1 dans chaque partition.
Vérifions la section de classement en utilisant la fonction ROW_NUMBER() avec les clauses PARTITION BY et ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Explication: Dans la requête que nous avons utilisée Clause PARTITION PAR pour partitionner la table selon la clause sectionName wise et ORDER BY avec les StudentsMarks qui sont classés dans DESC.
Sortir:

Sortir
Explication: Dans le résultat, nous pouvons voir que nous avons des partitions divisées par nom de section, puis dans chaque partition, les étudiants sont classés en fonction des notes des étudiants dans l'ordre DESC, la fonction ROW_NUMBER() attribue le numéro de ligne à partir de dans chaque partition et celui-ci est incrémenté. .
Comprendre ROW_NUMBER() sans PARTITION BY
La fonction ROW_NUMBER() de SQL Server est un outil flexible qui vous permet de fournir à chaque ligne d'un ensemble de résultats un numéro de ligne unique. Il est tout aussi efficace lorsqu'il est utilisé sans la clause PARTITION BY, même s'il est fréquemment utilisé conjointement pour le regroupement et le classement au sein des partitions. Les possibilités et utilisations de ROW_NUMBER() sans la clause PARTITION BY seront abordées dans cet article.
Syntaxe:
SÉLECTIONNER
ROW_NUMBER() PLUS ( COMMANDÉ PAR VotreCommandeParColonne) COMME Numéro de ligne,
Autres colonnes
DEPUIS
VotreNomTable ;
Vérifions la section de classement en utilisant la fonction ROW_NUMBER() sans les clauses PARTITION BY et ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Sortir:

Sortir
Utilisation de ROW_NUMBER() pour obtenir le sous-ensemble de lignes
La fonction ROW_NUMBER() peut être utilisée pour récupérer le sous-ensemble de lignes de la table à l'aide du CTE ce qui peut être utile dans le cas de pagination des données.
Vérifions les 2 meilleurs classements de chaque classe en utilisant le CTE (expression de table commune) avec la fonction ROW_NUMBER() :
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
Explication: Ici, dans la requête, nous avons utilisé l'expression CTE pour obtenir la table temporaire de la requête utilisée ci-dessus et nous avons utilisé la requête SELCT externe pour obtenir les étudiants dont le numéro de classement est inférieur ou égal à 2.
Sortir:

Sortir
Explication: Dans le résultat, nous pouvons voir que nous avons les 2 premiers classements de chaque section qui sont le sous-ensemble du tableau obtenu à partir de la requête présentée dans l'exemple précédent.
Les avantages deROW_NUMBER()>
Avec PARTITION PAR
- Permet un classement avancé des partitions.
- Permet une numérotation de ligne unique au sein de groupes spécifiques.
- Permet une plus grande flexibilité dans des circonstances impliquant une analyse approfondie.
Les avantages deROW_NUMBER()>
Sans PARTITION PAR
- Direct et simple.
- facilite le classement des éléments selon une colonne particulière.
- Peut offrir de meilleures performances, en particulier pour les ensembles de résultats plus petits.
Conclusion
C'est très utile quand on veut avoir le séquençage sur base de partition et faire les opérations nécessaires. En utilisant Clause ORDER BY est obligatoire lors de l'utilisation de la fonction ROW_NUMBER(). En utilisant également le CTE, nous pouvons obtenir les sous-ensembles de la table à partir des partitions ordonnées. Le principal cas d'utilisation de ROW_NUMBER() est le classement des lignes sur la base de différentes partitions, ce qui est très utile à des fins d'analyse des données.