Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni aggregate
PrecedenteFunzioni ed operatori per arrayFunzioni windowSuccessivo

9.18. Funzioni aggregate

Le funzioni aggregate calcolano un singolo risultato da un insieme di valori di input. Le funzioni aggregate incorporate sono elencate nella tabella Tabella 9.42, «Funzioni aggregate di uso generale» e nella Tabella 9.43, «Funzioni aggregate per statistiche». Speciali considerazioni sulla sintassi delle le funzioni aggregate sono spiegate in Sezione 4.2.7, «Espressioni aggregate». Consultare Sezione 2.7, «Funzioni aggregate» per ulteriori informazioni introduttive.

Tabella 9.42. Funzioni aggregate di uso generale

FunzioneTipo argomentoTipo restituitoDescrizione
array_agg(expression) qualsiasi array del tipo dell'argomento valori in input, inclusi valori null, concatenati in un array
avg(expression) smallint, int, bigint, real, double precision, numeric, o interval numeric per ogni argomento di tipo intero, double precision per argomenti a virgola mobile, altrimenti lo stesso tipo di dato dell'argomento la media (aritmetica) di tutti i valori in input
bit_and(expression) smallint, int, bigint, o bit stesso tipo di dato dell'argomento l'AND di bit di tutti i valori non-null in input, null se assenti
bit_or(expression) smallint, int, bigint, o bit stesso tipo di dato dell'argomento l'OR di bit di tutti i valori non-null in input, null se assenti
bool_and(expression) bool bool true se tutti i valori in input sono true, altrimenti false
bool_or(expression) bool bool true se almeno un valore in input è true, altrimenti false
count(*) bigintnumero di righe in input
count(expression)anybigint numero di righe per le quali il valore di expression non è null
every(expression) bool bool equivalente a bool_and
max(expression)qualsiasi tipo array, numerico, stringa o data/orariostesso tipo dell'argomento il massimo valore di expression attraverso tutti i valori in input
min(expression)qualsiasi tipo array, numerico, stringa o data/orariostesso tipo dell'argomento il minimo valore di expression attraverso tutti i valori in input
string_agg(expression, , delimiter) text, text text i valori in input concatenati in una stringa, separati da un delimitatore
sum(expression) smallint, int, bigint, real, double precision, numeric o interval bigint per argomenti smallint o int, numeric per argomenti bigint, double precision per argomenti floating-point, altrimenti lo stesso tipo di dato dell'argomento la somma di expression attraverso tutti i valori in input
xmlagg(expression) xml xml concatenazione di valori XML (vedere anche Sezione 9.14.1.7, «xmlagg»)

Prendere nota che eccetto count, queste funzioni restituiscono un valore null quando non ci sono righe selezionate. In particolare, sum senza nessuna riga restituisce null, non zero come ci si potrebbe aspettare. La funzione coalesce può essere usata per sostituire zero a null quando necesario.

[Nota]

Nota

Le aggregate booleane bool_and e bool_or corrispondono alle aggregate standard SQL every e any o some. Per quanto riguarda any e some,

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

Dove ANY può essere considerata o come intriduzione di una sottoquery oppure come una aggregata se l'espressione selezionata restituisce 1 riga con un valore booleano. Pertanto il nome standard non può essere fornito a queste aggregate.

[Nota]

Nota

Gli utenti abituati a lavorare con altri sistemi di gestione di database SQL possono rimanere delusi dalle prestazioni dell'aggregata count quando è applicata alla tabella intera. Una simile query:

SELECT count(*) FROM sometable;

sarà eseguita da PostgreSQL™ usando una scansione sequenziale dell'intera tabella.

Le funzioni aggregate array_agg, string_agg, e xmlagg, cos' come funzioni aggregate simili definite dall'utente, producono risultati molto differenti che dipendendono dall'ordine dai valori in input. Questo ordinamento non è specificato di default, ma può essere controllato scrivendo una clausola ORDER BY all'interno della chiamata alla funzione aggregata, come mostrato in Sezione 4.2.7, «Espressioni aggregate». Alternativamente, fornire valori in input da una sottoquery ordinata di solito funzionerà. Per esempio:

SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;

Ma questa sintassi non è permessa nello standard SQL, e non è portabile ad altri sistemi di database.

La Tabella 9.43, «Funzioni aggregate per statistiche» mostra le funzioni aggregate normalmente utilizzate nelle analisi statistiche. (Esse sono trattate separatamente per evitare di ingombrare la lista deglle funzioni aggregate usate più comunemente). Dove la descrizione menziona la N, si intende il numero di righe in input nelle quali tutte le espressioni in input sono non-null. In tutti i casi, se il calcolo è senza senso viene restituito null, per esempio quando N è zero.

Tabella 9.43. Funzioni aggregate per statistiche

FunzioneTipo argomentoTipo restituitoDescrizione
corr(Y, , X) double precision double precision coefficiente di correlazione
covar_pop(Y, , X) double precision double precision covarianza di popolazione
covar_samp(Y, , X) double precision double precision covarianza di campione
regr_avgx(Y, , X) double precision double precision media di variabile indipendente (sum(X)/N)
regr_avgy(Y, , X) double precision double precision media di variabile dipendente (sum(Y)/N)
regr_count(Y, , X) double precision bigint numero di righe in input nelle quali ambedue le espressioni sono non-null
regr_intercept(Y, , X) double precision double precision
[Nota]

Nota

Nota per il revisore: TODO

y-intercept of the least-squares-fit linear equation determined by the (X, Y) pairs
regr_r2(Y, , X) double precision double precision quadrato del coefficiente di correlazione
regr_slope(Y, , X) double precision double precision
[Nota]

Nota

Nota per il revisore: TODO

slope of the least-squares-fit linear equation determined by the (X, Y) pairs
regr_sxx(Y, , X) double precision double precision sum(X^2) - sum(X)^2/Nsum of squares» of the independent variable)
regr_sxy(Y, , X) double precision double precision sum(X*Y) - sum(X) * sum(Y)/Nsum of products» of independent times dependent variable)
regr_syy(Y, , X) double precision double precision sum(Y^2) - sum(Y)^2/Nsum of squares» of the dependent variable)
stddev(expression) smallint, int, bigint, real, double precision, or numeric double precision per asrgomenti in virgola mobile, altrimenti numeric alias storico per di stddev_samp
stddev_pop(expression) smallint, int, bigint, real, double precision, or numeric double precision per argomenti a virgola mobile, altrimenti numeric deviazione standard della popolazione dei valori in input
stddev_samp(expression) smallint, int, bigint, real, double precision o numeric double precision per argomenti a vorgola mobile, altrimenti numeric deviazione standard di campione dei valori di input
variance(expression) smallint, int, bigint, real, double precision o numeric double precision per argomenti a virgola mobile, altrimenti numeric alias storico di var_samp
var_pop(expression) smallint, int, bigint, real, double precision o numeric double precision per argomenti a virgola mobile, altrimenti numeric varianza di popolazione dei valori in input (quadrato della deviazione standard della popolazione)
var_samp(expression) smallint, int, bigint, real, double precision, o numeric double precision per argomenti a virgola mobile, altrimenti numeric varianza di campione dei valori in input (quadrato della varianza standard della popolazione)

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni aggregate
PrecedenteFunzioni ed operatori per arrayFunzioni windowSuccessivo