sql >> Database >  >> RDS >> PostgreSQL

Aggregatie op mediaanwaarde in SQL

U kunt vensterfuncties gebruiken. Ervan uitgaande dat dit een numerieke waarde is:

select cobrand_id, avg(xsum) as median
from (select m.*,
             row_number() over (partition by cobrand_id order by xsum) as seqnum,
             count(*) over (partition by cobrand_id) as cnt
      from tmp_median m
     ) m
where 2*seqnum in (cnt, cnt + 1, cnt + 2)
group by cobrand_id;

De where clausule filtert de rijen op 1 of 2 voor elke cobrand_id (let op de 2* ), dus dit werkt voor zowel even als oneven getallen in elke partitie. Het gemiddelde van deze waarden is dan de mediaan.




  1. Keer de natuurlijke volgorde van een MySQL-tabel om zonder ORDER BY?

  2. Waar is het MySQL 5.7 my.cnf-bestand?

  3. #1273 - Onbekende sortering:'utf8mb4_unicode_ci' cPanel

  4. Oracle:Zoeken in volledige tekst met voorwaarde