sum funzione di aggregazione

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Restituisce la somma calcolata dai valori di un gruppo.

Sintassi

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

Questa funzione può anche essere richiamata come finestra funzione usando la clausola OVER.

Argomenti

  • expr: espressione che restituisce un valore numerico o intervallo.
  • cond: espressione booleana facoltativa che filtra le righe usate per l'aggregazione.

Valori restituiti

Se expr è un tipo di numero integrale, un oggetto BIGINT. Se expr è DECIMAL(p, s) il risultato è DECIMAL(p + min(10, 31-p), s). Se expr è un intervallo, il tipo di risultato corrisponde a expr. Se expr è DECFLOAT, il risultato è DECFLOAT(34).

In caso contrario, un DOUBLE.

Se DISTINCT viene specificato solo i valori univoci vengono sommati.

Per gli input DECFLOAT, con la modalità di arrotondamento predefinita, il overflow produce infinito invece di un errore.

Per altri tipi di input, se il risultato sovrasta il tipo risultato, Azure Databricks genera un errore di ARITHMETIC_OVERFLOW. Per restituire un NULL A, usa try_sum.

Avviso

In Databricks Runtime, se spark.sql.ansi.enabled è false, un overflow di BIGINT non causa un errore ma "circoscrive" il risultato.

Condizioni di errore comuni

Esempi

> SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);
 30

> SELECT sum(col) FILTER(WHERE col <15)
    FROM VALUES (5), (10), (15) AS tab(col);
 15

> SELECT sum(DISTINCT col) FROM VALUES (5), (10), (10), (15) AS tab(col);
 30

> SELECT sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
 25

> SELECT sum(col) FROM VALUES (NULL), (NULL) AS tab(col);
 NULL

-- try_sum overflows a BIGINT
> SELECT try_sum(c1) FROM VALUES(5E18::BIGINT), (5E18::BIGINT) AS tab(c1);
 NULL

-- In ANSI mode sum returns an error if it overflows BIGINT
> SELECT sum(c1) FROM VALUES(5E18::BIGINT), (5E18::BIGINT) AS tab(c1);
 Error: ARITHMETIC_OVERFLOW

-- try_sum overflows an INTERVAL
> SELECT try_sum(c1) FROM VALUES(INTERVAL '100000000' YEARS), (INTERVAL '100000000' YEARS) AS tab(c1);
  NULL

-- sum returns an error on INTERVAL overflow
> SELECT sum(c1) FROM VALUES(INTERVAL '100000000' YEARS), (INTERVAL '100000000' YEARS) AS tab(c1);
 Error: ARITHMETIC_OVERFLOW