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.
SUMfonction de fenêtre
La fonction SUM window renvoie la somme des valeurs de la colonne ou de l'expression en entrée. La SUM fonction fonctionne avec des valeurs numériques et ignore NULL les valeurs.
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'argumentALL, la fonction conserve toutes les valeurs dupliquées de l'expression. ALLest la valeur par défaut. DISTINCT n’est pas pris en charge.
- OVER
-
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La OVER clause distingue les fonctions d'agrégation de fenêtres des fonctions d'agrégation d'ensembles normales.
- PARTITIONPAR expr_list
-
Définit la fenêtre de la SUM fonction en termes d'une ou de plusieurs expressions.
- ORDERPAR order_list
-
Trie les lignes dans chaque partition. Si aucun PARTITION BY n'est spécifié, ORDER BY utilise la table entière.
- 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 frame comprend le ROWS mot-clé et les spécificateurs associés. Consultez Récapitulatif de la syntaxe de la fonction de fenêtrage.
Types de données
Les types d'arguments pris en charge par la SUM fonction sont SMALLINT INTEGERBIGINT,NUMERIC,DECIMAL,REAL, et DOUBLEPRECISION.
Les types de retour pris en charge par la SUM fonction sont les suivants :
-
BIGINTpour SMALLINT nos INTEGER arguments
-
NUMERICpour les BIGINT arguments
-
DOUBLEPRECISIONpour 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 une description du WINSALES tableau, voirExemple 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 numérote toutes les lignes de manière séquentielle dans le jeu de résultats, en les classant par SALESID colonnes SELLERID et :
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 une description du WINSALES tableau, voirExemple de tableau contenant des exemples de fonctions de fenêtrage.
L'exemple suivant numérote toutes les lignes du jeu de résultats de manière séquentielle, partitionne les résultats par SELLERID et classe les résultats par partition SELLERID et SALESID au sein de celle-ci :
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)