要根据每组中的行数百分比检索行,您可以使用两种窗口函数:一种用于计算行数,另一种为它们提供唯一编号。
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几乎总是一个坏主意,因为它是一种填充到定义长度的固定长度数据类型。我希望您这样做只是为了设置示例,不要在您的真实表格中使用它。