- Kategorien:
Aggregationsfunktionen (Allgemein), Fensterfunktionen (Allgemein, Fensterrahmen)
STDDEV, STDDEV_SAMP¶
Gibt die Stichprobenstandardabweichung (Quadratwurzel der Stichprobenvarianz) von Nicht-NULL-Werten zurück. STDDEV und STDDEV_SAMP sind Aliasnamen für dieselbe Funktion.
Siehe auch STDDEV_POP, die die Populationsstandardabweichung (Quadratwurzel der Varianz) zurückgibt.
Syntax¶
Aggregationsfunktion
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> )
Fensterfunktionen
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
Weitere Informationen zur Syntax von window_frame
finden Sie unter Syntax und Nutzung von Fensterrahmen.
Argumente¶
expr1
Ein Ausdruck, der einen numerischen Wert ergibt. Dies ist der Ausdruck, anhand dessen die Standardabweichung berechnet wird.
expr2
Dies ist der optionale Ausdruck, nach dem partitioniert werden soll.
expr3
Dies ist der optionale Ausdruck, nach dem in jeder Partition sortiert werden soll.
Rückgabewerte¶
Der Datentyp des zurückgegebenen Werts ist DOUBLE.
Wenn alle Datensätze in einer Gruppe NULL sind, gibt die Funktion NULL zurück.
Nutzungshinweise¶
Bei Eingaben mit nur einem Datensatz geben STDDEV und STDDEV_SAMP jeweils NULL zurück. Dies unterscheidet sich vom Oracle-Verhalten: STDDEV_SAMP gibt für einen einzelnen Datensatz NULL und STDDEV gibt 0 zurück.
Wenn ein VARCHAR-Ausdruck übergeben wird, wandelt diese Funktion die Eingabe implizit in Gleitkommawerte um. Wenn die Umwandlung nicht ausgeführt werden kann, wird ein Fehler zurückgegeben.
Wenn diese Funktion als Fensterfunktion aufgerufen wird und die OVER-Klausel eine ORDER BY-Klausel enthält:
Das Schlüsselwort DISTINCT ist nicht zulässig und führt zu einem SQL-Kompilierungsfehler.
Es muss ein Fensterrahmen angegeben werden. Wenn Sie keinen Fensterrahmen angeben, wird ein impliziter kumulativer Fensterrahmen verwendet:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Weitere Informationen zu Fensterrahmen, einschließlich Syntax und Beispiele, finden Sie unter Syntax und Nutzung von Fensterrahmen.
Weitere Informationen zu impliziten Fensterrahmen finden Sie unter Hinweise zur Nutzung von Fensterrahmen.
Beispiele für Aggregationsfunktionen¶
Im folgenden Beispiel wird die Standardabweichung einer kleinen Stichprobe von Ganzzahlen (Integer) berechnet:
CREATE TABLE t1 (c1 INTEGER); INSERT INTO t1 (c1) VALUES (6), (10), (14) ; SELECT STDDEV(c1) FROM t1;+----------+ | STDDEV() | |----------| | 4 | +----------+
Beachten Sie, dass die Funktion STDDEV_SAMP das gleiche Ergebnis liefert:
SELECT STDDEV_SAMP(c1) FROM t1;+-----------------+ | STDDEV_SAMP(C1) | |-----------------| | 4 | +-----------------+
Im folgenden Beispiel wird eine kleine Tabelle namens menu_items
verwendet, in der die zum Verkauf angebotenen Artikel eines Imbiss aufgeführt sind. Weitere Informationen zum Erstellen und Laden dieser Tabelle finden Sie unter Erstellen und Laden der „menu_items“-Tabelle.
Um die Standardabweichung der Stichprobe für die Selbstkosten (COGS) und den Verkaufspreis für die Dessert
-Zeilen zu finden, führen Sie folgende Abfrage aus:
SELECT menu_category, STDDEV(menu_cogs_usd) stddev_cogs, STDDEV(menu_price_usd) stddev_price FROM menu_items WHERE menu_category='Dessert' GROUP BY 1;+---------------+-------------+--------------+ | MENU_CATEGORY | STDDEV_COGS | STDDEV_PRICE | |---------------+-------------+--------------| | Dessert | 1.00519484 | 1.471960144 | +---------------+-------------+--------------+
Beispiel für eine Fensterfunktion¶
Im folgenden Beispiel wird ebenfalls die Tabelle menu_items
verwendet (siehe Erstellen und Laden der „menu_items“-Tabelle), aber nun wird die Funktion STDDEV als Fensterfunktion aufgerufen.
Die Fensterfunktion partitioniert die Zeilen nach der Spalte menu_category
. Daher wird die Standardabweichung für jede Kategorie einmal berechnet, und dieser Wert wird im Ergebnis für jede Zeile der Gruppe wiederholt. Im folgenden Beispiel müssen die Zeilen sowohl nach der Menükategorie als auch nach den Selbstkosten gruppiert werden.
SELECT menu_category, menu_cogs_usd, STDDEV(menu_cogs_usd) OVER(PARTITION BY menu_category) stddev_cogs FROM menu_items GROUP BY 1,2 ORDER BY menu_category;
Die folgende Ausgabe zeigt einen Teil des Resultsets für diese Abfrage (die ersten 15 Zeilen):
+---------------+---------------+--------------+ | MENU_CATEGORY | MENU_COGS_USD | STDDEV_COGS | |---------------+---------------+--------------| | Beverage | 0.50 | 0.1258305738 | | Beverage | 0.65 | 0.1258305738 | | Beverage | 0.75 | 0.1258305738 | | Dessert | 1.25 | 1.054751155 | | Dessert | 3.00 | 1.054751155 | | Dessert | 1.00 | 1.054751155 | | Dessert | 2.50 | 1.054751155 | | Dessert | 0.50 | 1.054751155 | | Main | 4.50 | 3.444051572 | | Main | 2.40 | 3.444051572 | | Main | 1.50 | 3.444051572 | | Main | 11.00 | 3.444051572 | | Main | 8.00 | 3.444051572 | | Main | NULL | 3.444051572 | | Main | 12.00 | 3.444051572 | ...