Delen via


avg statistische functie

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Retourneert het gemiddelde dat wordt berekend op basis van waarden van een groep. Deze functie is een synoniem voor de gemiddelde statistische functie.

Syntaxis

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

Deze functie kan ook worden aangeroepen als een vensterfunctie met behulp van de OVER component.

Argumenten

  • expr: Een expressie die resulteert in een numerieke waarde of een interval.
  • 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 een DECIMAL(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 DAY 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 wordt opgegeven, wordt het gemiddelde berekend nadat duplicaten zijn verwijderd.

Als het resultaat het resultaattype overloopt, genereert Azure Databricks een ARITHMETIC_OVERFLOW fout. Als u in plaats daarvan een NULL wilt retourneren, gebruikt u try_avg.

Waarschuwing

Als in Databricks Runtime spark.sql.ansi.enabled isfalse, retourneert NULL een overloop in plaats van een fout.

Voorbeelden

> 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