sql >> Database >  >> RDS >> PostgreSQL

Hoe het gemiddelde van de 'middelste' waarden in een groep te krijgen?

Een andere optie die analytische functies gebruikt;

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. Is dit genoeg voor een veilige site? (4 kleine functies)

  2. Relatie met velen en krijg zonder dit

  3. mysql bestellen bij Union lijkt niet te werken

  4. Archiver opgehangen vanwege COMPATIBELE ORA-16484