try_avg
funzione di aggregazione
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Restituisce la media calcolata dai valori di un gruppo. Se è presente un overflow, restituisce NULL.
Sintassi
try_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 di 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 YEAR 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 specificato, la media viene calcolata dopo la rimozione dei duplicati.
Per generare un errore anziché NULL in caso di overflow, usare avg.
Esempi
> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT try_avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT try_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