Postgres hat keine eingebaute Aggregatfunktion für MEDIAN
. Sie können jedoch eines erstellen, indem Sie das Funktions-Snippet verwenden, das im Postgres-Wiki verfügbar ist
. Dieses Snippet ist auch Teil der benutzerdefinierte Bibliothek ulib_agg
.
Sobald es erstellt ist, können Sie es wie jede Aggregatfunktion wie SUM
verwenden oder STRING_AGG
mit ähnlichem window
Spezifikation. Postgres bietet Ihnen die Möglichkeit, mehrere window
anzugeben Definitionen für Aggregatfunktionen durch Komma getrennt.
Also, um einen MEDIAN
zu erhalten von den vorherigen 20 Datensätzen könnte Ihr Fenster wie in dieser Abfrage definiert werden.
SELECT
j.* , array_agg(position) over w as previous_positions,
median(position) over w_20 as med_20
FROM jockeys j
WINDOW w as
( partition by name ORDER BY id rows between
unbounded preceding and 1 preceding
),
w_20 as
( partition by name ORDER BY id rows between
20 preceding and 1 preceding
)
Darüber hinaus können Sie ROUND
anwenden Funktion, wenn Sie Dezimalziffern abschneiden möchten.