Die Fensterfunktion MEDIAN - Amazon Redshift

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.

Die Fensterfunktion MEDIAN

Berechnet den Medianwert für den Wertebereich in einem Fenster oder einer Partition. NULL-Werte im Bereich werden ignoriert.

MEDIAN ist eine Funktion für die inverse Verteilung, die ein kontinuierliches Verteilungsmodell annimmt.

MEDIAN ist eine reine Datenverarbeitungsknoten-Funktion. Die Funktion gibt einen Fehler zurück, wenn die Abfrage auf keine benutzerdefinierte Tabelle oder Amazon-Redshift-Systemtabelle verweist.

Syntax

MEDIAN ( median_expression ) OVER ( [ PARTITION BY partition_expression ] )

Argumente

median_expression

Ein Ausdruck (beispielsweise ein Spaltenname), der die Werte bereitstellt, für die der Median ermittelt werden soll. Der Datentyp des Ausdrucks muss entweder numerisch oder Datum/Uhrzeit sein oder implizit in einen solchen konvertierbar sein.

OVER

Eine Klausel, die die Fensterpartitionierung angibt. Die OVER-Klausel darf keine Spezifikation für Fensteranordnungen oder Fensterrahmen enthalten.

PARTITION BY partition_expression

Optional. Ein Ausdruck, der den Datensatzbereich für die einzelnen Gruppen in der OVER-Klausel festlegt.

Datentypen

Der Rückgabetyp wird durch den Datentyp von median_expression festgelegt. Die folgende Tabelle zeigt den Rückgabetyp für jeden median_expression-Datentyp an.

Typ der Eingabe Typ der Rückgabe
INT2, INT4, INT8, NUMERIC, DECIMAL DECIMAL
FLOAT, DOUBLE DOUBLE
DATUM DATUM

Nutzungshinweise

Wenn das Argument median_expression den Datentyp DECIMAL hat und mit der maximal zulässigen Präzision von 38 Stellen definiert ist, gibt MEDIAN möglicherweise ein falsches Ergebnis oder einen Fehler zurück. Wenn der Rückgabewert der Funktion MEDIAN 38 Stellen überschreitet, wird das Ergebnis entsprechend abgekürzt. Dies führt zu einem Genauigkeitsverlust. Wenn während der Interpolierung ein Zwischenergebnis die maximal zulässige Genauigkeit überschreitet, erfolgt ein numerischer Überlauf und die Funktion gibt einen Fehler zurück. Um diese Bedingungen zu vermeiden, werden die Verwendung eines Datentyps mit einer niedrigeren Genauigkeit oder die Umwandlung des Arguments median_expression in ein Argument mit niedrigerer Genauigkeit empfohlen.

Beispielsweise gibt eine SUM-Funktion mit einem DECIMAL-Argument standardmäßig eine Präzision von 38 Stellen zurück. Die Ergebnisskala ist die gleiche wie die Skala des Arguments. Eine SUM für eine DECIMAL(5,2)-Spalte gibt also einen DECIMAL(38,2)-Datentyp zurück.

Im folgenden Beispiel wird eine SUM-Funktion im Argument median_expression einer MEDIAN-Funktion verwendet. Der Datentyp der Spalte PRICEPAID ist DECIMAL(8,2). Daher gibt die SUM-Funktion DECIMAL(38,2) zurück.

select salesid, sum(pricepaid), median(sum(pricepaid)) over() from sales where salesid < 10 group by salesid;

Um einen möglichen Präzisionsverlust oder Overflow-Fehler zu vermeiden, wandeln Sie das Ergebnis in einen DECIMAL-Datentyp mit einer niedrigeren Präzision um, wie im folgenden Beispiel gezeigt.

select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) over() from sales where salesid < 10 group by salesid;

Beispiele

Im folgenden Beispiel wird der Median für die Verkaufsmenge für die einzelnen Verkäufer berechnet:

select sellerid, qty, median(qty) over (partition by sellerid) from winsales order by sellerid; sellerid qty median --------------------------- 1 10 10.0 1 10 10.0 1 30 10.0 2 20 20.0 2 20 20.0 3 10 17.5 3 15 17.5 3 20 17.5 3 30 17.5 4 10 25.0 4 40 25.0

Eine Beschreibung der Tabelle WINSALES finden Sie unter Beispieltabelle mit Beispielen von Fensterfunktionen.