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.