RANKfonction de fenêtre - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

RANKfonction de fenêtre

La fonction RANK window détermine le rang d'une valeur dans un groupe de valeurs, en fonction de l'expression ORDER BY contenue dans la OVER clause. Si la clause optionnelle PARTITION BY est présente, les classements sont réinitialisés pour chaque groupe de lignes. Les lignes avec des valeurs égales pour les critères de rang reçoivent le même rang. Amazon Redshift ajoute le nombre de lignes à égalité au rang à égalité pour calculer le rang suivant. Par conséquent, les rangs peuvent ne pas être des numéros consécutifs. Par exemple, si deux lignes sont classées 1, le prochain rang est 3.

RANKdiffère de DENSE_ fonction RANK de fenêtre celui-ci sur un point : pour DENSE _RANK, si deux lignes ou plus sont égales, il n'y a aucun écart dans la séquence des valeurs classées. Par exemple, si deux lignes sont classées 1, le prochain rang est 2.

Vous pouvez avoir des fonctions de classement avec différentes clauses PARTITION ORDER BY et BY dans la même requête.

Syntaxe

RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )

Arguments

( )

La fonction ne prend pas d’arguments, mais les parenthèses vides sont obligatoires.

OVER

Les clauses de fenêtre associées à la RANK fonction.

PARTITIONPAR expr_list

Facultatif. Une ou plusieurs expressions qui définissent le fenêtrage.

ORDERPAR order_list

Facultatif. Définit les colonnes sur lesquelles les valeurs de rang sont basées. Si aucun PARTITION BY n'est spécifié, ORDER BY utilise la table entière. Si ORDER BY est omis, la valeur renvoyée est 1 pour toutes les lignes.

Si ORDER BY ne produit pas d'ordre unique, l'ordre des lignes n'est pas déterministe. Pour de plus amples informations, veuillez consulter Ordonnancement unique des données pour les fonctions de fenêtrage.

Type de retour

INTEGER

Exemples

L’exemple suivant montre le classement de la table selon la quantité vendue (croissant par défaut) et l’affectation d’un rang à chaque ligne. 1 est la valeur classée la plus élevée. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués:

select salesid, qty, rank() over (order by qty) as rnk from winsales order by 2,1; salesid | qty | rnk --------+-----+----- 10001 | 10 | 1 10006 | 10 | 1 30001 | 10 | 1 40005 | 10 | 1 30003 | 15 | 5 20001 | 20 | 6 20002 | 20 | 6 30004 | 20 | 6 10005 | 30 | 9 30007 | 30 | 9 40001 | 40 | 11 (11 rows)

Notez que la clause externe ORDER BY de cet exemple inclut les colonnes 2 et 1 pour garantir qu'Amazon Redshift renvoie des résultats triés de manière cohérente chaque fois que cette requête est exécutée. Par exemple, les lignes avec les ventes IDs 10001 et 10006 ont des valeurs QTY et RNK des valeurs identiques. L’ordonnancement du résultat final défini par la colonne 1 garantit que la ligne 10001 précède toujours 10006. Pour une description du WINSALES tableau, voirExemple de tableau contenant des exemples de fonctions de fenêtrage.

Dans l’exemple suivant, l’ordonnancement est inversé pour la fonction de fenêtrage (order by qty desc). Désormais, la valeur de classement la plus élevée s'applique à la QTY valeur la plus élevée.

select salesid, qty, rank() over (order by qty desc) as rank from winsales order by 2,1; salesid | qty | rank ---------+-----+----- 10001 | 10 | 8 10006 | 10 | 8 30001 | 10 | 8 40005 | 10 | 8 30003 | 15 | 7 20001 | 20 | 4 20002 | 20 | 4 30004 | 20 | 4 10005 | 30 | 2 30007 | 30 | 2 40001 | 40 | 1 (11 rows)

Pour une description du WINSALES tableau, voirExemple de tableau contenant des exemples de fonctions de fenêtrage.

L'exemple suivant partitionne le tableau en fonction SELLERID de la quantité, classe chaque partition en fonction de la quantité (par ordre décroissant) et attribue un rang à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués.

select salesid, sellerid, qty, rank() over (partition by sellerid order by qty desc) as rank from winsales order by 2,3,1; salesid | sellerid | qty | rank --------+----------+-----+----- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)