try_avg mängdfunktion

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare

Returnerar medelvärdet som beräknas från värden för en grupp. Om det finns ett spill returnerar du NULL.

Syntax

try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]

Den här funktionen kan också anropas som en fönsterfunktion med hjälp av OVER -satsen.

Argument

  • expr: Ett uttryck som returnerar ett numeriskt värde eller ett intervallvärde.
  • cond: Ett valfritt booleskt uttryck som filtrerar de rader som används för aggregering.

Returer

Resultattypen beräknas enligt argumenten:

  • DECIMAL(p, s): Resultattypen är en DECIMAL(p + 4, s + 4). Om den maximala precisionen för DECIMAL uppnås begränsas skalningsökningen för att undvika förlust av signifikanta siffror.
  • årsmånadsintervall: Resultatet är en INTERVAL YEAR TO MONTH.
  • dagtidsintervall: Resultatet är en INTERVAL YEAR TO SECOND.
  • I alla andra fall är resultatet en DOUBLE.

Null-värden i gruppen ignoreras. Om en grupp är tom eller bara består av null-värden blir resultatet NULL.

Om DISTINCT anges beräknas medelvärdet när dubbletter har tagits bort.

Om du vill skapa ett fel i stället för NULL i händelse av ett spill använder du avg.

Exempel

> 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