PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Таблица на заявката с array_agg/медиана на ВСИЧКИ предишни позиции, LAST_10, LAST_50, с изключение на текущата позиция

Postgres няма вградена агрегатна функция за MEDIAN . Но можете да създадете такъв, като използвате функционалния фрагмент, наличен в уики на Postgres . Този фрагмент също е част от ulib_agg дефинирана от потребителя библиотека .

След като бъде създадена, можете да я използвате като всяка агрегатна функция като SUM или STRING_AGG с подобен window спецификация. Postgres ви предоставя опцията да посочите множество window дефиниции за агрегатни функции, разделени със запетая.

И така, за да получите MEDIAN от предишните 20 записа, вашият прозорец може да бъде дефиниран като в тази заявка.

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
     )

Освен това можете да приложите ROUND функция, ако искате да съкратите десетичните цифри.

ДЕМО




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django makemigrations Не са открити промени в приложението

  2. Запитване за персонализиран параметър postgresql с оператор SELECT

  3. Функция COPY в PostgreSQL

  4. Разлика между две дати postgresql във формат на Excel

  5. Приложение за релси с множество наематели:какви са плюсовете и минусите на различните техники?