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

Forespørgselstabel med array_agg/median for ALLE tidligere positioner, LAST_10, LAST_50, eksklusive nuværende position

Postgres har ikke en indbygget aggregatfunktion for MEDIAN . Men du kan oprette en ved hjælp af funktionsstykket, der er tilgængeligt i Postgres-wiki . Dette uddrag er også en del af det ulib_agg brugerdefinerede bibliotek .

Når den er oprettet, kan du bruge den som enhver samlet funktion som f.eks. SUM eller STRING_AGG med lignende window specifikation. Postgres giver dig mulighed for at angive flere window definitioner for aggregerede funktioner adskilt af et komma.

Så for at få en MEDIAN af tidligere 20 poster, kunne dit vindue være defineret som i denne forespørgsel.

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
     )

Derudover kan du anvende ROUND funktion, hvis du ønsker at afkorte decimaltal.

DEMO




  1. Minimal logning med INSERT...SELECT i tomme grupperede tabeller

  2. Gem billeder i MySQL-databasen

  3. Hvordan finder man næsten lignende poster i sql?

  4. Hvordan kan jeg omdøbe kolonne i laravel ved hjælp af migration?