sql >> Database teknologi >  >> RDS >> PostgreSQL

Aggregering efter medianværdi i SQL

Du kan bruge vinduesfunktioner. Forudsat at dette er en numerisk værdi:

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;

hvor klausul filtrerer rækkerne til enten 1 eller 2 for hver cobrand_id (bemærk 2* ), så dette virker for både lige og ulige tal i hver partition. Gennemsnittet af disse værdier er så medianen.




  1. Henter indeks over element i PL/SQL-samling

  2. Bestemmelse af påskedatoerne for ethvert år i Oracle PLSQL

  3. Runding total... med et twist

  4. MariaDB JSON_VALUE() vs JSON_QUERY():Hvad er forskellen?