各グループの行数のパーセンテージに基づいて行を取得するには、2つのウィンドウ関数を使用できます。1つは行をカウントし、もう1つは一意の番号を指定します。
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
を使用する 定義された長さに埋め込まれる固定長のデータ型であるため、ほとんどの場合、これは悪い考えです。例を設定するためだけにそれを行い、実際のテーブルでは使用しないでください。