Postgres n'a pas de fonction d'agrégation intégrée pour MEDIAN . Mais, vous pouvez en créer un en utilisant l'extrait de fonction disponible dans wiki Postgres
. Cet extrait fait également partie de la bibliothèque définie par l'utilisateur ulib_agg
.
Une fois créé, vous pouvez l'utiliser comme n'importe quelle fonction d'agrégation comme SUM ou STRING_AGG avec une window similaire spécification. Postgres vous offre la possibilité de spécifier plusieurs window définitions pour les fonctions d'agrégation séparées par une virgule.
Donc, pour obtenir une MEDIAN des 20 enregistrements précédents, votre fenêtre pourrait être définie comme dans cette requête.
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
)
En plus de cela, vous pouvez appliquer ROUND fonction si vous souhaitez tronquer les chiffres décimaux.