SQL PERCENT_RANK et CUME_DIST


Exemple

La fonction PERCENT_RANK calcule le classement d'une ligne par rapport à l'ensemble de lignes. Le pourcentage est basé sur le nombre de lignes du groupe dont la valeur est inférieure à la ligne actuelle.

La première valeur du jeu de résultats a toujours un classement en pourcentage de zéro. La valeur de la plus haute ou de la dernière valeur du jeu est toujours une.


La fonction CUME_DIST calcule la position relative d'une valeur spécifiée dans un groupe de valeurs en déterminant le pourcentage de valeurs inférieures ou égales à cette valeur. Cela s'appelle la distribution cumulative.

SELECT BusinessEntityID, JobTitle, SickLeaveHours,
PERCENT_RANK() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
       AS "Percent Rank",
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
       AS "Cumulative Distribution"
FROM Employee;

Dans cet exemple, vous utilisez une clause ORDER pour partitionner ou grouper les lignes extraites par l' SELECT en fonction des titres de travail des employés, les résultats de chaque groupe étant triés en fonction du nombre d'heures de congé de maladie utilisées par les employés.

BusinessEntityID Profession SickLeaveHours Rang en pourcentage Distribution cumulative
267 Spécialiste d'application 57 0 0,25
268 Spécialiste d'application 56 0.333333333333333 0,75
269 Spécialiste d'application 56 0.333333333333333 0,75
272 Spécialiste d'application 55 1 1
262 Assistante du responsable financier Cheif 48 0 1
239 Spécialiste des avantages 45 0 1
252 Acheteur 50 0 0.11111111111111111
251 Acheteur 49 0,125 0.333333333333333
256 Acheteur 49 0,125 0.333333333333333
253 Acheteur 48 0.375 0.555555555555555
254 Acheteur 48 0.375 0.555555555555555

La fonction PERCENT_RANK classe les entrées dans chaque groupe. Pour chaque entrée, il renvoie le pourcentage d'entrées du même groupe qui ont des valeurs inférieures.

La fonction CUME_DIST est similaire, sauf qu'elle renvoie le pourcentage de valeurs inférieures ou égales à la valeur actuelle.