Aby pobrać wiersze na podstawie procentu liczby wierszy w każdej grupie, możesz użyć dwóch funkcji okna:jednej do zliczania wierszy i drugiej do nadawania im unikalnej liczby.
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;
Przykład SQLFiddle:http://sqlfiddle.com/#!15/94fdd/1
Btw:używając char
jest prawie zawsze złym pomysłem, ponieważ jest to typ danych o stałej długości, który jest dopełniany do określonej długości. Mam nadzieję, że zrobiłeś to tylko w celu ustawienia przykładu i nie używaj go na swoim prawdziwym stole.