sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man medelvärdet av de "mitten" värdena i en grupp?

Ett annat alternativ som använder analytiska funktioner;

SELECT group_id,
       avg( test_value )
FROM (
  select t.*,
         row_number() over (partition by group_id order by test_value ) rn,
         count(*) over (partition by group_id  ) cnt
  from test t
) alias 
where 
   cnt <= 3
   or 
   rn between floor( cnt / 2 )-1 and ceil( cnt/ 2 ) +1
group by group_id
;

Demo --> http://www.sqlfiddle.com/#!11/af5e0 /59



  1. Ineffektiv SQL-fråga

  2. MySQL-parameteriserad fråga med Like

  3. Importera Mysql-databas med Ruby/Chef Recept for Vagrant

  4. Biblioteket har inte laddats:libmysqlclient.16.dylib fel vid försök att köra 'rails server' på OS X 10.6 med mysql2 gem