sql >> Databasteknik >  >> RDS >> PostgreSQL

Frågetabell med array_agg/median för ALLA tidigare positioner, LAST_10, LAST_50, exklusive aktuell position

Postgres har ingen inbyggd aggregatfunktion för MEDIAN . Men du kan skapa en med funktionskodavsnittet som är tillgängligt i Postgres wiki . Det här utdraget är också en del av det ulib_agg användardefinierade biblioteket .

När den väl har skapats kan du använda den som vilken aggregerad funktion som helst som SUM eller STRING_AGG med liknande window Specifikation. Postgres ger dig möjlighet att ange flera window definitioner för aggregerade funktioner separerade med ett kommatecken.

Så, för att få en MEDIAN av tidigare 20 poster kan ditt fönster definieras som i den här frågan.

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
     )

Utöver det kan du använda ROUND funktion om du vill trunkera decimalsiffror.

DEMO




  1. Integrerad transportdatamodell

  2. Tabellvariabel dålig prestanda vid infogning i SQL Server Stored Procedure

  3. Vad bör indexeras för att förbättra prestandan?

  4. Hur man lägger till Meridiem Indicator (AM/PM) till ett tidsvärde i Oracle