9.15. Fonctions d'agrégat
Les fonctions d'agrégat calculent une
valeur unique à partir d'un ensemble de valeurs en entrée. Les
fonctions d'agrégats intégrées sont listées dans Tableau 9.37,
« Fonctions d'agrégat à but général » et
Tableau 9.38, « Fonctions d'agrégats pour les
statistiques ». La syntaxe particulière des fonctions
d'agrégat est décrite dans la Section 4.2.7,
« Expressions d'agrégat ». La Section 2.7, « Fonctions
d'agrégat » fournit un supplément d'informations
introductives.
Tableau 9.37. Fonctions d'agrégat à but général
|
Fonction
|
Type d'argument
|
Type de retour
|
Description
|
|
avg(
expression
)
|
smallint, int, bigint,
real, double
precision, numeric ou
interval
|
numeric pour tout argument de
type entier, double precision
pour tout argument en virgule flottante, sinon identique au
type de données de l'argument
|
la moyenne arithmétique de toutes les valeurs en entrée
|
|
bit_and(
expression
)
|
smallint, int, bigint ou
bit
|
identique au type de données de l'argument
|
le AND bit à bit de toutes les valeurs non NULL en entrée
ou NULL s'il n'y en a pas
|
|
bit_or(
expression
)
|
smallint, int, bigint ou
bit
|
identique au type de données de l'argument
|
le OR bit à bit de toutes les valeurs non NULL en entrée ou
NULL s'il n'y en a pas
|
|
bool_and(
expression
)
|
bool
|
bool
|
true si toutes les valeurs en entrée valent true, false
sinon
|
|
bool_or(
expression
)
|
bool
|
bool
|
true si au moins une valeur en entrée vaut true, false
sinon
|
|
count(*)
|
|
bigint
|
nombre de lignes en entrée
|
|
count(
expression
)
|
tout type
|
bigint
|
nombre de lignes en entrée pour lesquelles l'
expression
n'est pas NULL
|
|
every(
expression
)
|
bool
|
bool
|
équivalent à bool_and
|
|
max(
expression
)
|
tout type array, numeric, string ou
date/time
|
identique au type en argument
|
valeur maximale de l'
expression
pour toutes les
valeurs en entrée
|
|
min(
expression
)
|
tout type array, numeric, string ou
date/time
|
identique au type en argument
|
valeur minimale de l'
expression
pour toutes les
valeurs en entrée
|
|
sum(
expression
)
|
smallint, int, bigint,
real, double
precision, numeric ou
interval
|
bigint pour les arguments de type
smallint ou int, numeric pour
les arguments de type bigint,
double precision pour les
arguments en virgule flottante, sinon identique au type de
données de l'argument
|
somme de l'
expression
pour toutes les valeurs en entrée
|
En dehors de count, ces fonctions renvoient
une valeur NULL si aucune ligne n'est sélectionnée. En particulier,
une somme (sum) sur aucune ligne renvoie
NULL et non zéro. La fonction coalesce peut
être utilisée pour substituer des zéros aux valeurs NULL quand cela
est nécessaire.
Note
Les agrégats booléens bool_and et
bool_or correspondent aux agrégats
standard du SQL every et any ou some. Pour
any et some,
il semble qu'il y a une ambiguïté dans la syntaxe standard :
SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
Ici, ANY peut être considéré à la fois
comme une sous-requête ou comme un agrégat si l'expression de
sélection ne renvoie qu'une ligne. Du coup, le nom standard ne
peut être donné à ces agrégats.
Note
Les utilisateurs habitués à travailler avec d'autres systèmes de
gestion de bases de données SQL peuvent être surpris par les
performances de l'agrégat count
lorsqu'il est appliqué à la table entière. En particulier, une
requête identique à
SELECT count(*) FROM ma_table;
est exécuté par PostgreSQL™ à l'aide d'un parcours
séquentiel de la table entière.
Tableau 9.38, « Fonctions d'agrégats pour les
statistiques » présente les fonctions d'agrégat typiquement
utilisées dans l'analyse statistique. (Elles sont séparées pour
éviter de grossir la liste des agrégats les plus utilisés.) Là où la
description mentionne
N
, cela
représente le nombre de lignes en entrée pour lesquelles toutes les
expressions en entrée sont non NULL. Dans tous les cas, NULL est
renvoyé si le calcul n'a pas de signification, par exemple si
N
vaut zéro.
Tableau 9.38. Fonctions d'agrégats pour les
statistiques
|
Fnction
|
Type de l'argument
|
Type renvoyé
|
Description
|
|
corr(
Y
, ,
X
)
|
double precision
|
double precision
|
coefficient de corrélation
|
|
covar_pop(
Y
, ,
X
)
|
double precision
|
double precision
|
covariance de population
|
|
covar_samp(
Y
, ,
X
)
|
double precision
|
double precision
|
covariance exemple
|
|
regr_avgx(
Y
, ,
X
)
|
double precision
|
double precision
|
moyenne de la variable indépendante (sum(
X
)/
N
)
|
|
regr_avgy(
Y
, ,
X
)
|
double precision
|
double precision
|
moyenne de la variable dépendante (sum(
Y
) /
N
)
|
|
regr_count(
Y
, ,
X
)
|
double precision
|
bigint
|
nombre de lignes dans lesquelles les deux expressions sont
non NULL
|
|
regr_intercept(
Y
, ,
X
)
|
double precision
|
double precision
|
interception de l'axe y pour l'équation linéaire de la
méthode des moindres carrés déterminée par les paires
(
X
,
Y
)
|
|
regr_r2(
Y
, ,
X
)
|
double precision
|
double precision
|
carré du coefficient de corrélation
|
|
regr_slope(
Y
, ,
X
)
|
double precision
|
double precision
|
inclinaison pour l'équation linéaire de la méthode des
moindres carrés déterminée par les paires (
X
,
Y
)
|
|
regr_sxx(
Y
, ,
X
)
|
double precision
|
double precision
|
sum(
X
^2) - sum(
X
)^2 /
N
(« somme des carrés » de la variable
indépendante)
|
|
regr_sxy(
Y
, ,
X
)
|
double precision
|
double precision
|
sum(
X
*
Y
) - sum(
X
) * sum(
Y
) /
N
(« somme des produits » des indépeendantes
multipliée par la variable dépendante)
|
|
regr_syy(
Y
, ,
X
)
|
double precision
|
double precision
|
sum(
Y
^2) - sum(
Y
)^2 /
N
(« somme des carrés » de la variable
dépendante)
|
|
stddev(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
alias historique pour stddev_samp
|
|
stddev_pop(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
déviation standard de la population pour les valeurs en
entrée
|
|
stddev_samp(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
exemple de déviation standard pour les valeurs en entrée
|
|
variance(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
alias historique de var_samp
|
|
var_pop(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
variance de la population pour les valeurs en entrée (carré
de la déviation standard de la population)
|
|
var_samp(
expression
)
|
smallint, int, bigint,
real, double
precision ou numeric
|
double precision pour les
arguments en virgule flottante, numeric sinon
|
exemple de la variance des valeurs en entrée (carré de la
déviation standard)
|
|