За да извлечете редовете въз основа на процента от броя на редовете във всяка група, можете да използвате две функции на прозореца:една за преброяване на редовете и една, за да им даде уникален номер.
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:http://sqlfiddle.com/#!15/94fdd/1
Между другото:използвайки char
почти винаги е лоша идея, защото е тип данни с фиксирана дължина, който е подплатен до определената дължина. Надявам се, че сте направили това само за настройка на примера и да не го използвате в истинската си таблица.