sql >> Base de Datos >  >> RDS >> PostgreSQL

Tabla de consulta con array_agg/median de TODAS las posiciones anteriores, LAST_10, LAST_50, excluyendo la posición actual

Postgres no tiene una función agregada incorporada para MEDIAN . Pero puede crear uno usando el fragmento de función disponible en wiki de Postgres . Este fragmento también forma parte de la biblioteca definida por el usuario ulib_agg .

Una vez que se crea, puede usarlo como cualquier función agregada como SUM o STRING_AGG con una window similar especificación. Postgres le brinda la opción de especificar múltiples window definiciones para funciones agregadas separadas por una coma.

Entonces, para obtener un MEDIAN de los 20 registros anteriores, su ventana podría definirse como en esta consulta.

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
     )

Además de eso, puede aplicar ROUND función si desea truncar dígitos decimales.

DEMO