För att hämta raderna baserat på procentandelen av antalet rader i varje grupp kan du använda två fönsterfunktioner:en för att räkna raderna och en för att ge dem ett unikt nummer.
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;
Exempel på SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1
Btw:använder char
är nästan alltid en dålig idé eftersom det är en datatyp med fast längd som är vadderad till den definierade längden. Jag hoppas att du bara gjorde det för att sätta upp exemplet och inte använder det i din riktiga tabell.