Para recuperar as linhas com base na porcentagem do número de linhas em cada grupo, você pode usar duas funções de janela:uma para contar as linhas e outra para fornecer um número único.
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;
Exemplo do SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1
Btw:usando
char
é quase sempre uma má ideia porque é um tipo de dados de comprimento fixo que é preenchido com o comprimento definido. Espero que você tenha feito isso apenas para configurar o exemplo e não o use em sua tabela real.