SQLShack (Français)

Nous effectuons des calculs sur les données en utilisant diverses fonctions agrégées telles que Max, Min et AVG. Nous obtenons une seule ligne de sortie en utilisant ces fonctions. SQL Sever fournit des fonctions SQL RANK pour spécifier le rang des champs individuels selon les catégorisations. Elle renvoie une valeur agrégée pour chaque ligne. Les fonctions SQL RANK sont également connues sous le nom de fonctions de fenêtre.

  • Remarque: Le terme Windows ne concerne pas le système D’exploitation Microsoft Windows., Ce sont des fonctions de classement SQL.

Nous avons les fonctions de rang suivantes.

  • ROW_NUMBER ()
  • RANK ()
  • DENSE_RANK ()
  • NTILE ()

dans les fonctions SQL RANK, nous utilisons la clause OVER() pour définir un ensemble de lignes dans le jeu de résultats. Nous pouvons également utiliser la clause SQL PARTITION BY pour définir un sous-ensemble de données dans une partition. Vous pouvez également utiliser la clause Order by pour trier les résultats dans un ordre décroissant ou croissant.

avant d’explorer ces fonctions SQL RANK, préparons des exemples de données., Dans cet échantillon de données, nous avons des résultats d’examen pour trois étudiants en mathématiques, en sciences et en anglais.

Nous avons les exemples de données suivants dans le tableau ExamResult.

nous allons utiliser SQL Rang Fonctions dans les exemples suivants.

ROW_Number() SQL RANK function

Nous utilisons ROW_Number() SQL RANK function pour obtenir un numéro séquentiel unique pour chaque ligne dans les données spécifiées. Il donne le rang un pour la première ligne, puis incrémente la valeur d’un pour chaque ligne. Nous obtenons également différents rangs pour la ligne ayant des valeurs similaires.,

exécutez la requête suivante pour obtenir un rang pour les étudiants en fonction de leurs notes.,

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks) RowNumber
FROM ExamResult;

By default, it sorts the data in ascending order and starts assigning ranks for each row., Dans la capture d’écran ci-dessus, nous obtenons le numéro de ligne 1 pour les marques 50.

Nous pouvons spécifier l’ordre décroissant avec la clause Order By, et cela change le rang en conséquence.,ae »>

1
2
3
4
5

SELECT Studentname,
Subject,
Marks,
ROW_NUMBER() OVER(ORDER BY Marks desc) RowNumber
FROM ExamResult;

RANK() SQL RANK Function

We use RANK() SQL Rank function to specify rank for each row in the result set., Nous avons les résultats des élèves pour trois matières. Nous voulons classer le résultat des élèves en fonction de leurs notes dans les matières. Par exemple, dans la capture d’écran suivante, L’élève Isabella a obtenu les notes les plus élevées en matière d’anglais et les notes les plus basses en matière de mathématiques. Selon les notes, Isabella obtient le premier rang en anglais et la 3ème place en matière de mathématiques.

Exécuter la requête suivante pour obtenir ce résultat.,v id= »c5a1f1b829″>

1
2
3
4
5
6
7

SELECT Studentname,
Subject,
Marks,
RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Studentname,
Rank;

Let’s execute the following query of SQL Rank function and look at the result set., Dans cette requête, nous n’avons pas spécifié de clause SQL PARTITION By pour diviser les données en un sous-ensemble plus petit. Nous utilisons la fonction SQL Rank avec la clause over sur la clause Marks (dans l’ordre décroissant) pour obtenir des rangs pour les lignes respectives.,div id= »7d9d5b54ae »>

1
2
3
4
5
6

SELECT Studentname,
Subject,
Marks,
RANK() OVER(ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY Rank;

In the output, we can see each student get rank as per their marks irrespective of the specific subject., Par exemple, les notes les plus élevées et les plus basses de l’ensemble de résultats complet sont respectivement 90 et 50. Dans l’ensemble de résultats, la note la plus élevée obtient le rang 1 et la note la plus basse le rang 9.

Si deux élèves obtiennent les mêmes notes (dans notre exemple, les numéros de ligne 4 et 5), leurs rangs sont également les mêmes.

DENSE_RANK() SQL RANK function

Nous utilisons la fonction DENSE_RANK() pour spécifier un numéro de rang unique dans la partition selon la valeur de colonne spécifiée. Il est similaire à la fonction de rang avec une petite différence.,

dans la fonction SQL RANK DENSE_RANK(), si nous avons des valeurs en double, SQL attribue également des rangs différents à ces lignes. Idéalement, nous devrions obtenir le même rang pour les valeurs en double ou similaires.

exécutons la requête suivante avec la fonction DENSE_RANK ().,

1
2
3
4
5
6

SÉLECTIONNEZ Studentname,
Sujet,
Marques
DENSE_RANK() OVER(ORDER BY Marques DESC) Rang
DE ExamResult
COMMANDE PAR Rang;

Dans la sortie, vous pouvez le voir, nous avons la même valeur pour les deux Lily et Isabella qui a marqué 70 marques.,

utilisons la fonction DENSE_RANK en combinaison avec la clause SQL PARTITION BY.,v id= »2d0aafc924″>

1
2
3
4
5
6
7

SÉLECTIONNEZ Studentname,
Sujet,
Marques
DENSE_RANK() OVER(PARTITION BY sous réserve de l’ORDRE PAR les Marques DESC) Rang
DE ExamResult
COMMANDE PAR Studentname,
Rang;

Nous n’avons pas de deux étudiants avec des marques similaires; par conséquent similaires au RANG de Fonction dans ce cas.,

mettons à jour la marque de l’étudiant avec la requête suivante et réexécutons la requête.

1
Mise à jour Examresult ensemble des Marques=70 où Studentname=’Isabella’ et Sujet=’Maths’

On peut voir que dans le groupe d’étudiants, Isabella a obtenu des marques similaires en Mathématiques et de Sciences., Rang est également le même pour les deux sujets dans ce cas.

nous allons voir la différence entre le RANG() et DENSE_RANK() SQL fonction Rang avec la requête suivante.,b829″>

1
2
3
4
5
6
7

SÉLECTIONNEZ Studentname,
Sujet,
Marques
DENSE_RANK() OVER(PARTITION BY StudentName ORDRE PAR les Marques ) Rang
DE ExamResult
COMMANDE PAR Studentname,
Rang;

Dans la sortie, vous pouvez voir l’écart dans le classement de sortie de fonction dans les partitions., Nous n’avons aucun écart dans la fonction DENSE_RANK.

Dans la capture d’écran suivante, vous pouvez voir qu’Isabella a des chiffres similaires dans les deux sujets. Une fonction de rang attribue le rang 1 pour des valeurs similaires, ignore en interne le rang deux et la ligne suivante obtient le rang trois.

dans la fonction Dense_Rank, elle maintient le rang et ne donne aucun écart pour les valeurs.

NTILE(N) SQL RANK function

Nous utilisons la fonction NTILE(N) pour distribuer le nombre de lignes dans le nombre spécifié (N) de groupes., Chaque groupe de lignes obtient son rang selon la condition spécifiée. Nous devons spécifier la valeur pour le nombre souhaité de groupes.

dans mon exemple, nous avons neuf enregistrements dans la table ExamResult. Le NTILE (2) montre que nous avons besoin d’un groupe de deux enregistrements dans le résultat.,

1
2
3
4
5

SELECT *,
NTILE(2) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

In the output, we can see two groups. Group 1 contains five rows, and Group 2 contains four rows.,

de Même, NTILE(3) divise le nombre de lignes de trois groupes de trois enregistrements dans chaque groupe.,

1
2
3
4
5

SELECT *,
NTILE(3) OVER(
ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY rank;

We can use SQL PARTITION BY clause to have more than one partition., Dans la requête suivante, chaque partition sur les sujets est divisée en deux groupes.,

1
2
3
4

SELECT *,
NTILE(2) OVER(PARTITION BY subject ORDER BY Marks DESC) Rank
FROM ExamResult
ORDER BY subject, rank;

Practical usage of SQL RANK functions

We can use SQL RANK function to fetch specific rows from the data., Supposons que nous voulions obtenir les données des étudiants des rangs 1 à 3. Dans la requête suivante, nous utilisons des expressions de table communes(CTE) pour obtenir des données à l’aide de la fonction ROW_NUMBER() et filtrons plus tard le résultat de CTE pour satisfaire notre condition.,d>

AVEC StudentRanks QUE
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Points) QUE les Rangs
DE ExamResult
)
SÉLECTIONNEZ StudentName , Marques
DE StudentRanks
OÙ Rangs >= 1 et classe <=3
COMMANDE PAR Rangs

On peut utiliser le DÉCALAGE de la commande de récupération à partir de SQL Server 2012 pour aller chercher un certain nombre de dossiers.,v id= »0fa57edc44″>

avec StudentRanks comme
(
SELECT *, ROW_NUMBER() OVER( ORDER BY Marks) AS Ranks
FROM ExamResult
)
SELECT StudentName , Marks
FROM studentranks
order by ranks offset 1 Rows FETCH NEXT 3 rows only;

un résumé rapide des fonctions SQL Rank

row_number

il attribue le numéro de rang séquentiel à chaque enregistrement unique.,

RANG

Il attribue le numéro de rang de chaque ligne dans une partition. Il ignore le nombre pour des valeurs similaires.

Dense_RANK

Il attribue le numéro de rang de chaque ligne dans une partition. Il ne saute pas le nombre pour des valeurs similaires.

NTILE(N)

Il divise le nombre de lignes que par partition spécifiée et attribue une valeur unique dans la partition.,

Conclusion

dans cet article, nous avons exploré les fonctions SQL RANK et la différence entre ces fonctions. Il est utile pour les développeurs sql de se familiariser avec ces fonctions pour explorer et bien gérer leurs données. Si vous avez des commentaires ou des questions, n’hésitez pas à les laisser dans les commentaires ci-dessous.,

  • auteur
  • articles récents

en tant que formateur certifié MCSA et Microsoft à Gurgaon, en Inde, avec 13 ans d’expérience, Rajendra travaille pour une variété de grandes entreprises en se concentrant sur l’optimisation des performances, la surveillance, la haute disponibilité et les stratégies de reprise après sinistre et la mise en œuvre., Il est l’auteur de centaines d’articles faisant autorité sur SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git et les technologies connexes qui ont été consultés par Plus de 10 millions de lecteurs à ce jour.
Il est le créateur de l’une des plus grandes collections en ligne gratuites d’articles sur un seul sujet, avec sa série de 50 parties sur SQL Server toujours sur les groupes de disponibilité. Sur la base de sa contribution à la communauté SQL Server, il a été reconnu par divers prix, y compris le prestigieux « meilleur auteur de l’année » en continu en 2020 et 2021 à SQLShack.,
Raj est toujours intéressé par les nouveaux défis, donc si vous avez besoin d’aide de consultation sur un sujet couvert dans ses écrits, il peut être joint à rajendra.gupta16 @ gmail.,com
voir tous les messages de Rajendra Gupta

derniers messages de Rajendra Gupta (voir tout)
  • effectuer des mises à niveau mineures et majeures pour AWS RDS SQL Server – Janvier 29, 2021
  • déploiement d’instances PostgreSQL AWS RDS – 27 janvier 2021
  • migration de vos bases de données SQL sur site vers AWS RDS SQL Server à l’aide d’AWS DMS-25 janvier 2021

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *