PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgresql :Comment sélectionner les n premiers pourcentages (%) d'entrées de chaque groupe/catégorie

Pour récupérer les lignes en fonction du pourcentage du nombre de lignes dans chaque groupe, vous pouvez utiliser deux fonctions de fenêtre :une pour compter les lignes et une pour leur donner un numéro unique.

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;

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

Au fait :en utilisant char est presque toujours une mauvaise idée car il s'agit d'un type de données de longueur fixe qui est rempli à la longueur définie. J'espère que vous n'avez fait cela que pour configurer l'exemple et que vous ne l'utilisez pas dans votre vraie table.