sql >> Database >  >> RDS >> PostgreSQL

Querytabel met array_agg/mediaan van ALLE vorige posities, LAST_10, LAST_50, exclusief huidige positie

Postgres heeft geen ingebouwde aggregatiefunctie voor MEDIAN . Maar u kunt er een maken met behulp van het functiefragment dat beschikbaar is in Postgres-wiki . Dit fragment maakt ook deel uit van de ulib_agg door de gebruiker gedefinieerde bibliotheek .

Als het eenmaal is gemaakt, kunt u het gebruiken zoals elke andere statistische functie zoals SUM of STRING_AGG met vergelijkbaar window specificatie. Postgres biedt u de mogelijkheid om meerdere window te specificeren definities voor geaggregeerde functies gescheiden door een komma.

Dus om een ​​MEDIAN . te krijgen van de vorige 20 records, kan uw venster worden gedefinieerd zoals in deze zoekopdracht.

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
     )

Bovendien mag u ROUND . toepassen functie als u decimale cijfers wilt afkappen.

DEMO




  1. Vind entiteiten waarnaar wordt verwezen in SQL Server:sys.dm_sql_referenced_entities

  2. numerieke overloop met NULL-kolom (0,3)

  3. Een nieuwe database en nieuwe verbinding maken in Oracle SQL Developer

  4. Kolomalias gebruiken in dezelfde SELECT-clausule