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

Postgresql :Hvordan vælger jeg top n procent(%) poster fra hver gruppe/kategori

For at hente rækkerne baseret på procentdelen af ​​antallet af rækker i hver gruppe kan du bruge to vinduesfunktioner:en til at tælle rækkerne og en til at give dem et unikt nummer.

select gp,
       val
from (
  select gp, 
         val,
         count(*) over (partition by gp) as cnt,
         row_number() over (partition by gp order by val desc) as rn
  from temp
) t
where rn / cnt <= 0.75;

SQLFiddle-eksempel:http://sqlfiddle.com/#!15/94fdd/1

Btw:ved at bruge char er næsten altid en dårlig idé, fordi det er en datatype med fast længde, der er polstret til den definerede længde. Jeg håber, at du kun gjorde det for at opsætte eksemplet og ikke bruger det i din rigtige tabel.



  1. Måder at få adgang til Oracle Database i PostgreSQL

  2. SQL server ignorer store og små bogstaver i et where-udtryk

  3. Opdater et jobtrin for et SQL Server Agent-job (T-SQL)

  4. Sådan fungerer Floor() i PostgreSQL