PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql:Wie wähle ich die Top-n-Prozent(%)-Einträge aus jeder Gruppe/Kategorie aus

Um die Zeilen basierend auf dem Prozentsatz der Anzahl der Zeilen in jeder Gruppe abzurufen, können Sie zwei Fensterfunktionen verwenden:eine, um die Zeilen zu zählen, und eine, um ihnen eine eindeutige Nummer zuzuweisen.

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

Übrigens:mit char ist fast immer eine schlechte Idee, da es sich um einen Datentyp mit fester Länge handelt, der auf die definierte Länge aufgefüllt wird. Ich hoffe, Sie haben das nur zum Einrichten des Beispiels getan und es nicht in Ihrer echten Tabelle verwendet.