try_avg
statistische functie
Van toepassing op: Databricks SQL
Databricks Runtime 11.3 LTS en hoger
Retourneert het gemiddelde dat wordt berekend op basis van waarden van een groep. Als er een overloop is, wordt NULL geretourneerd.
Syntaxis
try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Deze functie kan ook worden aangeroepen als een vensterfunctie met behulp van de OVER
clausule.
Argumenten
-
expr
: Een expressie die een numerieke waarde of een intervalwaarde retourneert. -
cond
: Een optionele Boole-expressie die de rijen filtert die worden gebruikt voor aggregatie.
Retouren
Het resultaattype wordt berekend op basis van de argumenten:
-
DECIMAL(p, s)
: Het resultaattype is eenDECIMAL(p + 4, s + 4)
. Als de maximale precisie voor DECIMAL is bereikt, wordt de toename van de schaal beperkt om verlies van significante cijfers te voorkomen. - jaar-maandinterval: het resultaat is een
INTERVAL YEAR TO MONTH
. - dag-tijdsinterval: het resultaat is een
INTERVAL YEAR TO SECOND
. - In alle andere gevallen is het resultaat een DOUBLE.
Null-waarden in de groep worden genegeerd. Als een groep leeg is of alleen uit null-waarden bestaat, is het resultaat NULL.
Als DISTINCT
dit is opgegeven, wordt het gemiddelde berekend nadat duplicaten zijn verwijderd.
Als u een fout wilt genereren in plaats van NULL in het geval van een overloop, gebruikt u avg.
Voorbeelden
> 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