PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Tabella delle query con array_agg/mediana di TUTTE le posizioni precedenti, LAST_10, LAST_50, esclusa la posizione corrente

Postgres non ha una funzione di aggregazione incorporata per MEDIAN . Tuttavia, puoi crearne uno utilizzando lo snippet di funzione disponibile in wiki di Postgres . Questo frammento fa anche parte della libreria definita dall'utente ulib_agg .

Una volta creato, puoi usarlo come qualsiasi funzione aggregata come SUM o STRING_AGG con window simile specifica. Postgres ti offre la possibilità di specificare più window definizioni per funzioni aggregate separate da una virgola.

Quindi, per ottenere un MEDIAN dei precedenti 20 record, la tua finestra potrebbe essere definita come in questa query.

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
     )

Inoltre puoi applicare ROUND funzione se vuoi troncare le cifre decimali.

DEMO