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.