avg statistische functie

Van toepassing op:gemarkeerd met ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime

Retourneert het gemiddelde dat is berekend op basis van waarden van een groep. Deze functie is een synoniem voor 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 Booleaanse expressie die de rijen filtert die worden gebruikt voor aggregatie.

Retourneert

Het resultaattype wordt berekend als voor de argumenten:

  • DECIMAL(p, s): Het resultaattype is een DECIMAL(p + 4, s + 4). Als de maximale precisie voor DECIMAAL wordt bereikt, wordt de schaalvergroting beperkt om verlies van significante cijfers te voorkomen.
  • interval jaar-maand: 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 is 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 spark.sql.ansi.enabled in Databricks Runtime is, wordt falseer een overloop geretourneerd NULL 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