Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
La fonction de fenêtrage SUM renvoie la somme des valeurs de la colonne d’entrée ou de l’expression. La fonction SUM utilise des valeurs numériques et ignore les valeurs NULL.
Syntaxe
SUM ( [ ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
Arguments
- expression
-
Colonne cible ou expression sur laquelle la fonction opère.
- ALL
-
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.
- OVER
-
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.
- PARTITION BY expr_list
-
Définit la fenêtre de la fonction SUM en termes d’une ou de plusieurs expressions.
- ORDER BY order_list
-
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.
- frame_clause
-
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez Récapitulatif de la syntaxe de la fonction de fenêtrage.
Types de données
Les types d’argument pris en charge par la fonction SUM sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL et DOUBLE PRECISION.
Les types de retour pris en charge par la fonction SUM sont les suivants :
-
Arguments BIGINT for SMALLINT ou INTEGER
-
Arguments NUMERIC for BIGINT
-
DOUBLE PRECISION pour les arguments à virgule flottante
Exemples
L’exemple suivant montre la création d’une somme cumulée (évolutive) des volumes de ventes classés par date et par ID de ventes :
select salesid, dateid, sellerid, qty,
sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;
salesid | dateid | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 | 3 | 10 | 10
10001 | 2003-12-24 | 1 | 10 | 20
10005 | 2003-12-24 | 1 | 30 | 50
40001 | 2004-01-09 | 4 | 40 | 90
10006 | 2004-01-18 | 1 | 10 | 100
20001 | 2004-02-12 | 2 | 20 | 120
40005 | 2004-02-12 | 4 | 10 | 130
20002 | 2004-02-16 | 2 | 20 | 150
30003 | 2004-04-18 | 3 | 15 | 165
30004 | 2004-04-18 | 3 | 20 | 185
30007 | 2004-09-07 | 3 | 30 | 215
(11 rows)
Pour obtenir une description de la table WINSALES, consultez Exemple de tableau contenant des exemples de fonctions de fenêtrage.
L’exemple suivant montre la création d’une somme cumulée (évolutive) des volumes de ventes par date, le partitionnement des résultats par ID de vendeur et le classement des résultats par date et ID de ventes au sein de la partition :
select salesid, dateid, sellerid, qty,
sum(qty) over (partition by sellerid
order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;
salesid | dateid | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 | 3 | 10 | 10
10001 | 2003-12-24 | 1 | 10 | 10
10005 | 2003-12-24 | 1 | 30 | 40
40001 | 2004-01-09 | 4 | 40 | 40
10006 | 2004-01-18 | 1 | 10 | 50
20001 | 2004-02-12 | 2 | 20 | 20
40005 | 2004-02-12 | 4 | 10 | 50
20002 | 2004-02-16 | 2 | 20 | 40
30003 | 2004-04-18 | 3 | 15 | 25
30004 | 2004-04-18 | 3 | 20 | 45
30007 | 2004-09-07 | 3 | 30 | 75
(11 rows)
L’exemple suivant montre la numérotation séquentielle de toutes les lignes de l’ensemble de résultats, classées en fonction des colonnes SELLERID et SALESID :
select salesid, sellerid, qty,
sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;
salesid | sellerid | qty | rownum
--------+----------+------+--------
10001 | 1 | 10 | 1
10005 | 1 | 30 | 2
10006 | 1 | 10 | 3
20001 | 2 | 20 | 4
20002 | 2 | 20 | 5
30001 | 3 | 10 | 6
30003 | 3 | 15 | 7
30004 | 3 | 20 | 8
30007 | 3 | 30 | 9
40001 | 4 | 40 | 10
40005 | 4 | 10 | 11
(11 rows)
Pour obtenir une description de la table WINSALES, consultez Exemple de tableau contenant des exemples de fonctions de fenêtrage.
L’exemple suivant montre la numérotation séquentielle de toutes les lignes de l’ensemble de résultats, le partitionnement des résultats par SELLERID et le classement des résultats par SELLERID et SALESID au sein de la partition :
select salesid, sellerid, qty,
sum(1) over (partition by sellerid
order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;
salesid | sellerid | qty | rownum
---------+----------+-----+--------
10001 | 1 | 10 | 1
10005 | 1 | 30 | 2
10006 | 1 | 10 | 3
20001 | 2 | 20 | 1
20002 | 2 | 20 | 2
30001 | 3 | 10 | 1
30003 | 3 | 15 | 2
30004 | 3 | 20 | 3
30007 | 3 | 30 | 4
40001 | 4 | 40 | 1
40005 | 4 | 10 | 2
(11 rows)