sql >> Databáze >  >> RDS >> PostgreSQL

Tabulka dotazů s array_agg/medián VŠECH předchozích pozic, LAST_10, LAST_50, kromě aktuální pozice

Postgres nemá vestavěnou agregační funkci pro MEDIAN . Můžete ji však vytvořit pomocí fragmentu funkce dostupného na Postgres wiki . Tento úryvek je také součástí uživatelsky definované knihovny ulib_agg .

Jakmile je vytvořena, můžete ji používat jako jakoukoli agregační funkci jako SUM nebo STRING_AGG s podobným window Specifikace. Postgres vám poskytuje možnost zadat více window definice agregačních funkcí oddělené čárkou.

Chcete-li získat MEDIAN z předchozích 20 záznamů může být vaše okno definováno jako v tomto dotazu.

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
     )

Navíc můžete použít ROUND funkce, pokud chcete zkrátit desetinné číslice.

DEMO




  1. Je automatická aktualizace Sphinx indexem, když přidáte data do svého SQL?

  2. Rails/ActiveRecord Skupina podle měsíce+roku s počty

  3. Proč je u velkých tabulek zamykání na úrovni tabulky lepší než zamykání na úrovni řádků?

  4. Jak připojit databázi MySQL k aplikaci ReactJS?