avg
funzione di aggregazione
Si applica a: Databricks SQL Databricks Runtime
Restituisce la media calcolata dai valori di un gruppo. Questa funzione è un sinonimo della funzione di aggregazione media.
Sintassi
avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Questa funzione può anche essere richiamata come funzione window usando la OVER
clausola .
Argomenti
expr
: espressione che restituisce un valore numerico o un intervallo.cond
: espressione booleana facoltativa che filtra le righe usate per l'aggregazione.
Valori restituiti
Il tipo di risultato viene calcolato come per gli argomenti:
DECIMAL(p, s)
: il tipo di risultato è un oggettoDECIMAL(p + 4, s + 4)
. Se viene raggiunta la precisione massima per DECIMAL, l'aumento della scala sarà limitato per evitare la perdita di cifre significative.- intervallo anno-mese: il risultato è un oggetto
INTERVAL YEAR TO MONTH
. - intervallo di tempo giorno: il risultato è un
INTERVAL DAY TO SECOND
oggetto . - In tutti gli altri casi il risultato è double.
I valori Null all'interno del gruppo vengono ignorati. Se un gruppo è vuoto o è costituito solo da valori Null, il risultato è NULL.
Se DISTINCT
viene specificata la media viene calcolata dopo la rimozione dei duplicati.
Se il risultato supera il tipo di risultato, Azure Databricks genera un errore ARITHMETIC_OVERFLOW . Per restituire un valore NULL, utilizzare invece try_avg.
Avviso
In Databricks Runtime, se spark.sql.ansi.enabled è false
, viene restituito NULL
un overflow anziché un errore.
Esempi
> 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: CANNOT_CHANGE_DECIMAL_PRECISION