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.