MySQL百分位数如何计算
发布时间:2022-01-10 16:06:00 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要为大家展示了MySQL百分位数如何计算,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下MySQL百分位数如何计算这篇文章吧。 select query_time,d,max(ts) ts from ( select t2.query_time,ts,rn,round
这篇文章主要为大家展示了“MySQL百分位数如何计算”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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百分位数如何计算”这篇文章的所有内容,感谢各位的阅读! (编辑:景德镇站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐