ABS |
Valeur absolue |
|---|---|
| BigQuery | |
Syntaxe
| ABS(X) |
Paramètres
| Nom | Description |
|---|---|
| X | Ce paramètre permet d'indiquer l'expression à traiter. |
Description
Cette fonction permet de demander la valeur absolue du nombre spécifié.
Remarques
- Cette fonction permet de s'assurer que les valeurs traitées sont toujours positives, quel que soit le signe initial de l'expression : Cela est utile dans les cas où seules les magnitudes des nombres comptent, comme dans le calcul d'écarts absolus ou de distances. Cela permet aussi de simplifier certaines logiques conditionnelles en évitant des tests sur le signe.
- La fonction ABS prend en charge différents types numériques, notamment les entiers, les décimaux et les flottants : Toutefois, il est essentiel de s'assurer que le type de données de l'expression d'entrée correspond bien aux types acceptés. Une mauvaise gestion de type peut entraîner des erreurs inattendues ou la conversion implicite en un autre type de nombre.
- Si l'expression passée à ABS est une valeur infinie (+inf ou -inf), le résultat renvoyé sera toujours +inf : Cela garantit que le comportement reste mathématiquement cohérent, tout en respectant les représentations numériques IEEE 754. Cependant, ce comportement peut perturber les agrégats si l'on ne filtre pas ces cas particuliers.
- La fonction renvoie une erreur si le résultat attendu ne peut pas être représenté dans le type de donnée d'origine : Par exemple, dans le cas d'un entier signé de 64 bits, la valeur minimale (comme -9223372036854775808) n'a pas de positif équivalent représentable, ce qui provoque une erreur. Il est donc prudent de tester les limites ou d'utiliser un type plus large.
- ABS(X) est souvent utilisée dans les formules statistiques ou analytiques, comme le calcul de la distance absolue entre deux colonnes : Par exemple, ABS(prix_actuel - prix_initial) permet de mesurer l'écart de manière uniforme, sans se soucier du sens de la variation. Cela rend cette fonction incontournable dans les tableaux de bord, rapports ou analyses temporelles.
- Lorsque X est NULL, la fonction ABS renvoie également NULL, conformément au comportement standard des fonctions BigQuery : Cela signifie que la fonction ne lève pas d'erreur dans ce cas, mais transmet la nullité dans la chaîne de calcul. Il peut être nécessaire de combiner ABS avec IFNULL() ou COALESCE() pour éviter les résultats indéterminés.
- Dans un contexte d'optimisation de requêtes, l'utilisation de ABS dans une clause WHERE peut empêcher BigQuery d'utiliser certains index ou partitions : Par exemple, WHERE ABS(colonne) > 10 peut désactiver les optimisations si colonne est utilisée comme clef de tri ou partition. Il vaut mieux essayer de reformuler la condition si la performance est critique.
- La fonction ABS ne modifie pas la précision décimale des nombres flottants ou décimaux, elle se contente de changer le signe si nécessaire : Autrement dit, ABS(-1.234) renvoie exactement 1.234, sans perte de précision liée à l'opération. Cela la rend sûre à utiliser même dans les calculs financiers ou scientifiques exigeant une exactitude élevée.
Exemples
L'exemple suivant donne la valeur absolue d'un nombre entier négatif :
- SELECT ABS(-10) AS valeur_absolue_negative;
on obtiendra un résultat ressemblant à ceci :
/*-------------------------*| valeur_absolue_negative |
+-------------------------+
| 10 |
*-------------------------*/
Cet exemple montre que ABS(-10) renvoie 10, la valeur positive de -10.
Valeur absolue d'un nombre décimal positif :
- SELECT ABS(5.75) AS valeur_absolue_positive;
on obtiendra un résultat ressemblant à ceci :
/*-------------------------*| valeur_absolue_positive |
+-------------------------+
| 5.75 |
*-------------------------*/
Dans ce cas, ABS(5.75) renvoie 5.75 car la valeur est déjà positive.
Valeur absolue d'une colonne contenant des nombres : Supposons que vous ayez une table nommée ventes avec une colonne difference_prix pouvant contenir des valeurs positives ou négatives (par exemple, la différence entre le prix de vente et le prix coûtant) :
- SELECT
- produit,
- difference_prix,
- ABS(difference_prix) AS difference_absolue
- FROM
- `votre_projet.votre_dataset.ventes`;
Exemple de données dans ventes :
| produit | difference_prix |
|---|---|
| A | 15.00 |
| B | -7.50 |
| C | 0.00 |
| D | 22.25 |
| E | -12.00 |
Résultat de la requête :
/*---------*-----------------*--------------------*| produit | difference_prix | difference_absolue |
*---------*-----------------*--------------------*
| A | 15.00 | 15.00 |
| B | -7.50 | 7.50 |
| C | 0.00 | 0.00 |
| D | 22.25 | 22.25 |
| E | -12.00 | 12.00 |
*---------*-----------------*--------------------*/
Dernière mise à jour : Vendredi, le 8 novembre 2019