NTH_VALUE |
nième valeur |
| BigQuery |
Syntaxe
|
NTH_VALUE(value_expression, constant_integer_expression [{RESPECT | IGNORE} NULLS])
|
Paramètres
| Nom |
Description |
| value_expression |
Ce paramètre permet de spécifier la colonne ou l'expression dont vous souhaitez récupérer la valeur. |
| constant_integer_expression |
Ce paramètre permet de définir la position (le "n-ième" enregistrement) à partir du début de la fenêtre ou de la partition que vous souhaitez récupérer. Il doit s'agir d'un entier constant positif. Par exemple, 1 pour le premier enregistrement, 2 pour le deuxième, et ainsi de suite. |
| RESPECT NULLS |
Ce paramètre permet de spécifier que la fonction NTH_VALUE doit prendre en compte les valeurs NULL lors du comptage des éléments pour atteindre la position n (définie par constant_integer_expression). |
| IGNORE NULLS |
Ce paramètre permet de spécifier que la fonction NTH_VALUE doit ignorer (sauter) les valeurs NULL lors du comptage des éléments pour atteindre la position n. |
Description
Cette fonction permet de demander l'enregistrement à la position spécifié dans un ensemble de valeurs.
Remarques
- Fonction analytique basée sur la position ordinale : NTH_VALUE permet d'extraire la valeur correspondant à la n-ième position dans une fenêtre ou une
partition de résultats. Cela en fait une fonction très utile pour des analyses ordinales ou pour extraire des repères dans des classements.
- Nécessite une clause OVER() pour définir le contexte d'analyse : Étant une fonction de type analytique, NTH_VALUE doit obligatoirement être utilisée avec
une clause OVER(...). Cette clause peut inclure des instructions comme PARTITION BY et ORDER BY pour bien délimiter l'espace dans lequel la n-ième valeur sera
recherchée.
- Le paramètre de position doit être un entier constant : La position (n) doit être une valeur entière constante et strictement positive, par
exemple 1, 2, 3,... Il n'est pas possible de passer une colonne dynamique en tant que n, ce qui limite un peu la flexibilité mais garantit la performance.
- Différence importante entre RESPECT NULLS et IGNORE NULLS : Si RESPECT NULLS est utilisé (ou par défaut), les valeurs NULL comptent dans le
positionnement, ce qui peut entraîner le retour d'un NULL. Avec IGNORE NULLS, seules les valeurs non nulles sont prises en compte, ce qui permet d'éviter les "trous"
dans les résultats.
- Complémentaire à FIRST_VALUE et LAST_VALUE : NTH_VALUE est une généralisation de FIRST_VALUE (équivalent à NTH_VALUE(..., 1)) et permet une plus grande
souplesse pour récupérer n'importe quelle valeur située à une position précise dans un ordre défini.
- Très utile pour extraire des rangs spécifiques : On peut utiliser NTH_VALUE pour identifier le 2e, 3e ou n-ième meilleur (ou pire) résultat dans un
groupe, comme le 2e vendeur ayant généré le plus de revenus dans une région donnée, tout en conservant les autres lignes du tableau.
- Son comportement dépend fortement de l'ordre défini : Si l'ordre (ORDER BY) n'est pas clairement spécifié dans la clause OVER, le résultat de NTH_VALUE
peut être non déterministe, car la position n'a de sens que dans un ordre strictement défini. Il faut donc toujours l'utiliser avec un tri logique.
- Le résultat peut être NULL si la position dépasse le nombre de lignes : Si le nombre total de lignes dans la fenêtre est inférieur à la valeur de
n, NTH_VALUE retournera automatiquement NULL, ce qui est un comportement important à anticiper lors de l'analyse de petits groupes.
Dernière mise à jour : Jeudi, le 18 Juin 2020