Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » OLAP-Unterstützung » Fensterfunktionen in SQL Anywhere

 

Funktionen für Standardabweichung und Varianz

SQL Anywhere unterstützt zwei Versionen von Funktionen für Varianz und Standardabweichung: eine Version für Stichproben und eine Version für Normalverteilungen. Die Auswahl einer Version hängt von dem statistischen Zusammenhang ab, in der die Funktion benutzt wird.

Alle Funktionen für Varianz und Standardabweichung sind echte Aggregatfunktionen, da sie Werte für eine Zeilenpartition berechnen können, die durch die GROUP BY-Klausel der Abfrage erstellt wurde. Ebenso wie andere Aggregatfunktionen, etwa MAX oder MIN, ignorieren auch diese Funktionen NULL in der Eingabe.

Um die Performance zu verbessern, berechnet SQL Anywhere den Mittelwert und die Abweichung vom Mittelwert in einem Schritt. Daher ist nur ein Datendurchlauf erforderlich.

Außerdem werden unabhängig vom Datentyp des zu analysierenden Ausdrucks alle Berechnungen für Varianz und Standardabweichung im IEEE-Format einer Gleitkommazahl mit doppelter Genauigkeit durchgeführt. Falls die Eingabe einer Funktion für Varianz oder Standardabweichung leer ist, liefert die Funktion NULL als Ergebnis. Wenn VAR_SAMP für eine einzelne Zeile berechnet wird, ist das Ergebnis NULL, während es bei VAR_POP der Wert 0 ist.

SQL Anywhere bietet folgende Funktionen für Standardabweichung und Varianz:

Informationen über die mathematischen Formeln, die diesen Funktionen zugrunde liegen, finden Sie unter Mathematische Formeln für die Aggregatfunktionen.

STDDEV-Funktion

Diese Funktion ist ein Alias für die Funktion STDDEV_SAMP. Weitere Hinweise finden Sie unter STDDEV_SAMP-Funktion [Aggregat].

STDDEV_POP-Funktion

Diese Funktion berechnet die Standardabweichung für eine Normalverteilung, die aus einem nummerischen Ausdruck besteht, als DOUBLE.

Beispiel 1

Die nachstehende Abfrage ergibt eine Ergebnismenge, die die Mitarbeiter zeigt, deren Gehalt um eine Standardabweichung über dem Durchschnittsgehalt ihrer Abteilung liegt. Die Standardabweichung ist ein Messwert für die Abweichung der Daten vom Mittelwert.

SELECT *
FROM ( SELECT 
    Surname AS Employee, 
    DepartmentID AS Department, 
    CAST( Salary as DECIMAL( 10, 2 ) ) 
        AS Salary,
    CAST( AVG( Salary ) 
        OVER ( PARTITION BY DepartmentID ) AS DECIMAL ( 10, 2 ) ) 
        AS Average,
    CAST( STDDEV_POP( Salary )
        OVER ( PARTITION BY DepartmentID ) AS DECIMAL ( 10, 2 ) ) 
        AS StandardDeviation
    FROM Employees
    GROUP BY Department, Employee, Salary )
    AS DerivedTable
WHERE Salary > Average + StandardDeviation
ORDER BY Department, Salary, Employee;

Die nachstehende Tabelle stellt die Ergebnismenge dieser Abfrage dar. Jede Abteilung hat mindestens einen Mitarbeiter, dessen Gehalt deutlich vom Mittelwert abweicht.

Employee Department Salary Average StandardDeviation
1 Lull 100 87900.00 58736.28 16829.60
2 Scheffield 100 87900.00 58736.28 16829.60
3 Scott 100 96300.00 58736.28 16829.60
4 Sterling 200 64900.00 48390.95 13869.60
5 Savarino 200 72300.00 48390.95 13869.60
6 Kelly 200 87500.00 48390.95 13869.60
7 Shea 300 138948.00 59500.00 30752.40
8 Blaikie 400 54900.00 43640.67 11194.02
9 Morris 400 61300.00 43640.67 11194.02
10 Evans 400 68940.00 43640.67 11194.02
11 Martinez 500 55500.00 33752.20 9084.50

Der Mitarbeiter Scott verdient $96,300.00, der Abteilungsdurchschnitt ist hingegen $58,736.28. Die Standardabweichung für diese Abteilung ist 16,829.00. Dies bedeutet, dass Gehälter unter $75,565.88 (58736.28 + 16829.60 = 75565.88) innerhalb einer Standardabweichung des Mittelwerts liegen. Bei $96,300.00 ist der Mitarbeiter Scott deutlich über diesem Wert.

In diesem Beispiel wird davon ausgegangen, dass "Surname" und "Salary" für alle Mitarbeiter unterschiedlich sind, was aber nicht notwendigerweise der Fall ist. Um Eindeutigkeit zu gewährleisten, könnten Sie der GROUP BY-Klausel das Merkmal "EmployeeID" hinzufügen.

Beispiel 2

Die folgende Anweisung listet den Durchschnitt und die Varianz in der Anzahl der Elemente pro Auftrag in verschiedenen Zeitabschnitten auf:

SELECT YEAR( ShipDate ) AS Year,
    QUARTER( ShipDate ) AS Quarter,
    AVG( Quantity ) AS Average,
    STDDEV_POP( Quantity ) AS Variance
FROM SalesOrderItems
GROUP BY Year, Quarter
ORDER BY Year, Quarter;

Diese Abfrage liefert das folgende Ergebnis:

Year Quarter Average Variance
2000 1 25.775148 14.2794...
2000 2 27.050847 15.0270...
... ... ... ...

Weitere Hinweise zur Syntax dieser Funktion finden Sie unter STDDEV_SAMP-Funktion [Aggregat].

STDDEV_SAMP-Funktion

Diese Funktion berechnet die Standardabweichung für eine Stichprobe, die aus einem nummerischen Ausdruck besteht, als DOUBLE. Die folgende Anweisung liefert beispielsweise den Durchschnitt und die Varianz in der Anzahl der Elemente pro Auftrag in verschiedenen Quartalen:

SELECT YEAR( ShipDate ) AS Year,
    QUARTER( ShipDate ) AS Quarter,
    AVG( Quantity ) AS Average,
    STDDEV_SAMP( Quantity ) AS Variance
FROM SalesOrderItems
GROUP BY Year, Quarter
ORDER BY Year, Quarter;

Diese Abfrage liefert das folgende Ergebnis:

Year Quarter Average Variance
2000 1 25.775148 14.3218...
2000 2 27.050847 15.0696...
... ... ... ...

Weitere Hinweise zur Syntax dieser Funktion finden Sie unter STDDEV_POP-Funktion [Aggregat].

VARIANCE-Funktion

Diese Funktion ist ein Alias der VAR_SAMP-Funktion. Weitere Hinweise finden Sie unter VAR_SAMP-Funktion [Aggregat].

VAR_POP-Funktion

Diese Funktion berechnet die statistische Varianz einer Normalverteilung, die aus einem nummerischen Ausdruck besteht, als DOUBLE. Die folgende Anweisung listet beispielsweise den Durchschnitt und die Varianz in der Anzahl der Elemente pro Auftrag in verschiedenen Zeitabschnitten auf:

SELECT YEAR( ShipDate ) AS Year,
    QUARTER( ShipDate ) AS Quarter,
    AVG( Quantity ) AS Average,
    VAR_POP( quantity ) AS Variance
FROM SalesOrderItems
GROUP BY Year, Quarter
ORDER BY Year, Quarter;

Diese Abfrage liefert das folgende Ergebnis:

Year Quarter Average Variance
2000 1 25.775148 203.9021...
2000 2 27.050847 225.8109...
... ... ... ...

Falls VAR_POP für eine einzelne Zeile berechnet wird, lautet das Ergebnis der Wert 0.

Weitere Hinweise zur Syntax dieser Funktion finden Sie unter VAR_POP-Funktion [Aggregat].

VAR_SAMP-Funktion

Diese Funktion berechnet die statistische Varianz einer Stichprobe, die aus einem nummerischen Ausdruck besteht, als DOUBLE.

Die folgende Anweisung listet beispielsweise den Durchschnitt und die Varianz in der Anzahl der Elemente pro Auftrag in verschiedenen Zeitabschnitten auf:

SELECT YEAR( ShipDate ) AS Year,
    QUARTER( ShipDate ) AS Quarter,
    AVG( Quantity ) AS Average,
    VAR_SAMP( Quantity ) AS Variance
FROM SalesOrderItems
GROUP BY Year, Quarter
ORDER BY Year, Quarter;

Diese Abfrage liefert das folgende Ergebnis:

Year Quarter Average Variance
2000 1 25.775148 205.1158...
2000 2 27.050847 227.0939...
... ... ... ...

Falls VAR_SAMP für eine einzelne Zeile berechnet wird, lautet das Ergebnis NULL.

Weitere Hinweise zur Syntax dieser Funktion finden Sie unter VAR_SAMP-Funktion [Aggregat].