RANK |
Rang |
|---|---|
| BigQuery | |
Syntaxe
| RANK() |
Description
Cette fonction permet de demander le rang ordinal de chaque enregistrement de la requête trié.
Remarques
- Fonction analytique pour ordonner les résultats : La fonction RANK() est une fonction de fenêtrage (window function) attribuant à chaque ligne un rang en fonction d'un ordre défini explicitement dans la clause ORDER BY. Elle ne peut pas être utilisée seule, elle doit être accompagnée d'un cadre de fenêtre (OVER(...)).
- Rangs avec sauts en cas d'égalité : Si plusieurs lignes ont la même valeur de tri, elles reçoivent le même rang, et les rangs suivants sont sautés. Par exemple, si deux lignes partagent le rang 1, la suivante aura le rang 3, pas 2. Cela distingue RANK() de DENSE_RANK().
- Utilisation typique avec OVER(ORDER BY ...) : Pour que RANK() fonctionne correctement, il faut préciser un ordre avec OVER(ORDER BY champ). Cela permet de définir le critère de classement, comme une note, un score ou une date, selon le besoin métier.
- Compatible avec la clause PARTITION BY : En utilisant OVER(PARTITION BY champ ORDER BY autre_champ), on peut calculer le rang séparément pour chaque groupe (par exemple, le classement des ventes par région ou par catégorie de produit).
- Utile pour extraire les meilleurs éléments : RANK() est couramment utilisé pour sélectionner les meilleurs éléments d'un groupe, comme par exemple les 3 meilleurs étudiants d'une promotion ou les 5 articles les plus populaires dans chaque catégorie.
- Type de retour entier (INT64) : Le résultat de RANK() est un nombre entier (INT64), ce qui permet de l'utiliser facilement dans des comparaisons numériques, des filtres (WHERE rank <= 10) ou des visualisations classées.
- Différence avec ROW_NUMBER() et DENSE_RANK() : Contrairement à ROW_NUMBER(), qui attribue un rang unique même en cas d'égalité, RANK() assigne le même rang aux valeurs égales, mais sautera les rangs suivants. DENSE_RANK() fait la même chose, sans sauts.
- Peut impacter les performances sur de grandes tables : Comme toute fonction de fenêtre avec tri, RANK() nécessite un tri interne des données selon l'ordre défini. Sur de grands volumes de données, cela peut ralentir les performances si l'indexation ou les partitions ne sont pas optimisées.
Dernière mise à jour : Jeudi, le 18 Juin 2020