sql >> Databasteknik >  >> RDS >> PostgreSQL

Aggregering efter medianvärde i SQL

Du kan använda fönsterfunktioner. Förutsatt att detta är ett numeriskt värde:

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;

var satsen filtrerar raderna till antingen 1 eller 2 för varje cobrand_id (notera 2* ), så detta fungerar för både jämna och udda nummer i varje partition. Genomsnittet av dessa värden är då medianen.




  1. Konvertera varchar till datetime i SQL Server

  2. MySQL - Kan du hämta standardvärdet för en kolumn?

  3. Oracle SQLPlus inställningsmiljövariabel baserad på variabel

  4. ora-01406 Fel vid hämtning av värden med OCI