Megosztás a következőn keresztül:


try_avg összesítő függvény

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 11.3 LTS és újabb

Egy csoport értékeiből kiszámított középértéket számítja ki. Ha túlcsordulás van, null értéket ad vissza.

Szintaxis

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

Ez a függvény ablakfüggvényként is meghívható, a OVER záradék használatával.

Argumentumok

  • expr: Numerikus vagy intervallumértéket visszaadó kifejezés.
  • cond: Nem kötelező logikai kifejezés, amely az összesítéshez használt sorokat szűri.

Visszatérítések

Az eredménytípus kiszámítása az argumentumokhoz hasonlóan történik:

  • DECIMAL(p, s): Az eredmény típusa a DECIMAL(p + 4, s + 4). Ha a tizedes érték maximális pontosságát eléri, a skála növekedését korlátozzák, hogy elkerüljék a jelentős számjegyek elvesztését.
  • év-hónap intervallum: Az eredmény egy INTERVAL YEAR TO MONTH.
  • nap-idő intervallum: Az eredmény egy INTERVAL YEAR TO SECOND.
  • Minden más esetben az eredmény dupla.

A csoporton belüli null értékek figyelmen kívül lesznek hagyva. Ha egy csoport üres, vagy csak null értékből áll, az eredmény NULL.

Ha DISTINCT meg van adva, a rendszer az ismétlődések eltávolítása után számítja ki az átlagot.

Ha null érték helyett hibát szeretne jelezni túlcsordulás esetén, használja avg-t.

Példák

> 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