1.取一列分排名前30%的行。总的行数不固定。2.30%除不尽的可以直接向下取整。如11条就取前3

image.png

FineReport batfpd 发布于 2020-6-9 16:38
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
weisonzhouLv5见习互助
发布于2020-6-9 17:11(编辑于 2020-6-9 17:12)

SELECT

*

FROM(

SELECT

@i:= @i + 1 as nums ,   -- 排名

a.`数值`,

(

SELECT floor(COUNT(1)*0.3) nums  from zyw_test_20200609_01 

) as hangs  -- 计算排名前30%的最大名次

FROM

zyw_test_20200609_01 a,

(SELECT @i:= 0) b

ORDER BY CAST(a.`数值` AS signed) asc 

)tb

where tb.nums <= tb.hangs  -- 获取排名前30%的行


注:该SQL是mysql的语法


最佳回答
0
孤陌Lv6资深互助
发布于2020-6-9 16:45(编辑于 2020-6-9 16:50)

用条件属性 新值 SEQ() 生成序号 然后 扩展后排序  然后条件属性 隐藏行高  

然后写 序号单元格>TRUNC(COUNT(a2)*0.3) 可以把COUNT(a2) 放在标题行上 然后公式修改成

TRUNC(COUNT(公式所在单元格)*0.3)  这样就可以了

最佳回答
0
P.anyuLv4初级互助
发布于2020-6-9 16:46

select top 30 percent  * from t

  • 3关注人数
  • 629浏览人数
  • 最后回答于:2020-6-9 17:12
    请选择关闭问题的原因
    确定 取消
    返回顶部