Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
fonction d’agrégation
S’applique à :
Databricks SQL
Databricks Runtime
Retourne la moyenne calculée à partir des valeurs d’un groupe. Cette fonction est un synonyme de mean la fonction d’agrégation.
Syntaxe
avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Cette fonction peut également être appelée en tant que fonction de fenêtre à l’aide de la clause OVER.
Les arguments
-
expr: expression qui prend une valeur numérique ou un intervalle. -
cond: une expression booléenne facultative filtrant les lignes utilisées pour l’agrégation.
retourne :
Le type de résultat est calculé comme pour les arguments :
-
DECIMAL(p, s): le type de résultat est uneDECIMAL(p + 4, s + 4). Si la précision maximale deDECIMALest atteinte, l'augmentation de l'échelle sera limitée pour éviter la perte de chiffres significatifs. - Intervalle d’année-mois : le résultat est
INTERVAL YEAR TO MONTH. - intervalle de jour-heure : le résultat est
INTERVAL DAY TO SECOND. - DECFLOAT : Le résultat est
DECFLOAT(34). - Dans tous les autres cas, le résultat est un
DOUBLE.
Les valeurs Null au sein du groupe sont ignorées. Si un groupe est vide ou comprend uniquement des valeurs Null, le résultat est NULL.
Si DISTINCT est spécifié, la moyenne est calculée après la suppression des doublons.
Pour les entrées DECFLOAT, avec le mode d’arrondi par défaut, le dépassement produit l’infini au lieu d’une erreur.
Pour les autres types d’entrée, si le résultat dépasse le type de résultat, Azure Databricks génère une erreur de ARITHMETIC_OVERFLOW. Pour retourner un NULL à la place, utilisez try_avg.
Avertissement
Pour les entrées autres que DECFLOAT, dans Databricks Runtime, si spark.sql.ansi.enabled est false, un débordement revient NULL au lieu d’une erreur.
Conditions d’erreur courantes
Exemples
> SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT avg(col) FROM VALUES (INTERVAL '1' YEAR), (INTERVAL '2' YEAR) AS tab(col);
1-6
-- Overflow results in NULL for try_avg()
> SELECT try_avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
NULL
-- Overflow causes error for avg() in ANSI mode.
> SELECT avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
Error: ARITHMETIC_OVERFLOW