sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql :Hur väljer jag top n procent(%) poster från varje grupp/kategori

För att hämta raderna baserat på procentandelen av antalet rader i varje grupp kan du använda två fönsterfunktioner:en för att räkna raderna och en för att ge dem ett 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;

Exempel på SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1

Btw:använder char är nästan alltid en dålig idé eftersom det är en datatyp med fast längd som är vadderad till den definierade längden. Jag hoppas att du bara gjorde det för att sätta upp exemplet och inte använder det i din riktiga tabell.



  1. Designa en datamodell för ett hotellrumsbokningssystem

  2. Hur man distribuerar Chamilo MySQL-databasen för hög tillgänglighet

  3. Hur Stuff och "For XML Path" fungerar i SQL Server?

  4. Hur Coalesce() fungerar i SQLite