sql >> Database >  >> RDS >> PostgreSQL

Postgresql:Hoe selecteer ik de top n procent (%) items uit elke groep/categorie

Om de rijen op te halen op basis van het percentage van het aantal rijen in elke groep, kunt u twee vensterfuncties gebruiken:één om de rijen te tellen en één om ze een uniek nummer te geven.

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-voorbeeld:http://sqlfiddle.com/#!15/94fdd/1

Btw:gebruik char is bijna altijd een slecht idee omdat het een gegevenstype met een vaste lengte is dat wordt opgevuld tot de gedefinieerde lengte. Ik hoop dat je dat alleen hebt gedaan voor het opzetten van het voorbeeld en dat je het niet in je echte tabel gebruikt.



  1. Hoe de referentiële actie van de referentiële sleutel wijzigen? (gedrag)

  2. SQL Server:Isolatieniveau lekken over gepoolde verbindingen

  3. Blijft de volgorde in een subquery gegarandeerd behouden?

  4. Tabel maken met behulp van GUI in SQL Server - SQL Server / T-SQL-zelfstudie, deel 37