Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
SUMFensterfunktion
Die SUM Fensterfunktion gibt die Summe der Eingabespalten- oder Ausdruckswerte zurück. Die SUM Funktion arbeitet mit numerischen Werten und ignoriert NULL Werte.
Syntax
SUM ( [ ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
Argumente
- Ausdruck
-
Die Zielspalte oder der Ausdruck, für die/den die Funktion ausgeführt wird.
- ALL
-
Mit dem Argument ALL behält die Funktion alle doppelten Werte aus dem Ausdruck bei. ALList die Standardeinstellung. DISTINCT wird nicht unterstützt.
- OVER
-
Gibt die Fensterklauseln für die Aggregationsfunktionen an. Die OVER Klausel unterscheidet Fensteraggregationsfunktionen von normalen Aggregationsfunktionen für Gruppen.
- PARTITIONVON expr_list
-
Definiert das Fenster für die SUM Funktion in Form eines oder mehrerer Ausdrücke.
- ORDERVON order_list
-
Sortiert die Zeilen innerhalb der einzelnen Partitionen. Wenn kein PARTITION BY angegeben ist, verwendet ORDER BY die gesamte Tabelle.
- frame_clause
-
Wenn eine ORDER BY-Klausel für eine Aggregatfunktion verwendet wird, ist eine explizite Frame-Klausel erforderlich. Die Rahmenklausel gibt den Satz von Zeilen im Fenster einer Funktion genauer an, einschließlich oder ausschließlich Sätzen von Zeilen innerhalb des geordneten Ergebnisses. Die Frame-Klausel besteht aus dem ROWS Schlüsselwort und den zugehörigen Spezifizierern. Siehe Übersicht über die Syntax von Fensterfunktionen.
Datentypen
Die von der SUM Funktion unterstützten Argumenttypen sindSMALLINT,INTEGER,BIGINT,NUMERIC, DECIMALREAL, und DOUBLEPRECISION.
Die von der SUM Funktion unterstützten Rückgabetypen sind:
-
BIGINTfür SMALLINT oder INTEGER Argumente
-
NUMERICfür BIGINT Argumente
-
DOUBLEPRECISIONfür Gleitkomma-Argumente
Beispiele
Im folgenden Beispiel wird eine kumulative (gleitende) Summe von Verkaufsmengen nach Datum und Verkaufs-ID erstellt:
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)
Eine Beschreibung der WINSALES Tabelle finden Sie unter. Beispieltabelle mit Beispielen von Fensterfunktionen
Im folgenden Beispiel wird eine kumulative (gleitende) Summe von Verkaufsmengen nach Datum erstellt, die Ergebnisse nach Verkäufer-ID partitioniert und die Ergebnisse innerhalb der Partition nach Datum und Verkaufs-ID geordnet:
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)
Im folgenden Beispiel werden alle Zeilen in der Ergebnismenge sequenziell nummeriert, sortiert nach den SALESID Spalten SELLERID und:
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)
Eine Beschreibung der WINSALES Tabelle finden Sie unterBeispieltabelle mit Beispielen von Fensterfunktionen.
Im folgenden Beispiel werden alle Zeilen in der Ergebnismenge sequenziell nummeriert, die Ergebnisse nach SELLERID partitioniert und die Ergebnisse nach SELLERID und SALESID innerhalb der Partition sortiert:
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)