MySQL百分位数如何计算

60次阅读
没有评论

共计 1347 个字符,预计需要花费 4 分钟才能阅读完成。

这篇文章主要为大家展示了“MySQL 百分位数如何计算”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“MySQL 百分位数如何计算”这篇文章吧。

select query_time,d,max(ts) ts from (

 select t2.query_time,ts,rn,round(rn/total,10) percent,

 case

 when 0.71 =round(rn/total,10) then 0.71

 when 0.81 =round(rn/total,10) then 0.81

 when 0.91 =round(rn/total,10) then 0.91

 end d

 from (

 select query_time,ts,

 case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn

 from (

 select * from t ,(select @gid:= ,@rn:=0) vars order by query_time,ts

 ) t1

 ) t2 inner join (

 select query_time,count(*) total from t group by query_time

 ) t3 on(t2.query_time=t3.query_time)

 where round(rn/total,10) =0.71

) t6

where d is not null

group by query_time,d

 where round(rn/total,10) =0.71
即 用定义的最小的百分位数进行过滤后, 再 group by

此时 查询时间可以低至 20.531 s

当然,这个 SQL 还有进一步提升的空间

计算 某个百分位数的位置, 有如下的公式:
loc=1+(n-1)*p,n 是元素数,p 是分位点。loc 大小介于 1 和 n 之间

那么 SQL 可以进行如下优化

select t5.query_time,t5.ts,t2.v from (

 select query_time,total,v, floor(1+(total-1)*v) rn

 from (

 select query_time,count(*) total from t group by query_time

 ) t3, (select 0.71 v,1 seq union all select 0.81,2 union all select 0.91,3) t4

)

t2 inner join (

 select

 query_time,

 case when @gid=query_time then @rn:=@rn+1 when @gid:=query_time then @rn:=1 end rn,

 ts

 from (

 select * from t ,(select @gid:= ,@rn:=0) vars order by query_time,ts

 ) t1

) t5 on (t2.query_time=t5.query_time and t2.rn=t5.rn)

除了本身简化了 SQL 复杂度, 查询时间也低至 15 秒左右

以上是“MySQL 百分位数如何计算”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计1347字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)