Documentation PostgreSQL 8.1.23 > Langage SQL > Fonctions et opérateurs > Fonctions d'agrégat | |
Fonctions et opérateurs sur les tableaux | Expressions de sous-expressions |
Les fonctions d'agrégat calculent une seule valeur résultant d'un ensemble de valeurs en entrée. Le Tableau 9.37, « Fonctions d'agrégat » affiche les fonctions d'agrégat intégrées. Les considérations spéciales sur la syntaxe des fonctions d'agrégat sont expliquées dans la Section 4.2.7, « Expressions d'agrégat ». Consultez la Section 2.7, « Fonctions d'agrégat » pour un supplément d'informations d'introduction.
Tableau 9.37. Fonctions d'agrégat
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 (au sens 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, sinon false |
bool_or(expression) | bool | bool | true si au moins une valeur en entrée vaut true, sinon false |
count(*) | bigint | nombre de valeurs en entrée | |
count(expression) | tout type | bigint | nombre de valeurs 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 |
stddev(expression) | smallint, int, bigint, real, double precision ou numeric | double precision pour les arguments en virgule flottante, sinon numeric | déviation standard des 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 |
variance(expression) | smallint, int, bigint, real, double precision ou numeric | double precision pour les arguments en virgule flottante, sinon numeric | simple variance des valeurs en entrée (carré de la déviation) |
Il devrait être noté qu'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 pas zéro. La fonction coalesce pourrait être utilisée pour substituer des zéros aux valeurs NULL quand cela est nécessaire.
Les agrégats booléens bool_and et bool_or correspondent aux agrégats standards du SQL every et any ou some. Comme 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.
Les utilisateurs habitués à travailler avec d'autres systèmes de gestion de bases de données SQL pourraient ê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;
sera exécuté par PostgreSQL™ en utilisant un parcours séquentiel de la table entière.