广告
返回顶部
首页 > 资讯 > 数据库 >MySQL如何实现百分位数计算
  • 734
分享到

MySQL如何实现百分位数计算

2024-04-02 19:04:59 734人浏览 泡泡鱼
摘要

这篇文章主要介绍了Mysql如何实现百分位数计算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建试验数据,5天每天一百万随机数据,总共50

这篇文章主要介绍了Mysql如何实现百分位数计算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。



创建试验数据,5天每天一百万随机数据,总共500w数据

create table nums(id int not null primary key);
delimiter $$
begin
    truncate table nums;
    while s*2<=cnt do
        set s=s*2;
end $$

call pFastCreateNums(2000000);

drop table if exists t ;
create table t(
    query_time date,
    ts float,
    key(query_time,ts)
);


insert into t select '2018-07-01',round(100000*rand(),2) from nums where id<=1000000;
insert into t select '2018-07-02',round(100000*rand(),2) from nums where id<=1000000;
insert into t select '2018-07-03',round(100000*rand(),2) from nums where id<=1000000;
insert into t select '2018-07-04',round(100000*rand(),2) from nums where id<=1000000;
insert into t select '2018-07-05',round(100000*rand(),2) from nums where id<=1000000;

首先,修正上文的sql,增加精度,因为在大数据量下,会有显著的误差。


  1. select query_time,v,ts

  2. from (

  3.     select t6.query_time,t6.ts,v,seq,

  4.     case when @gid=concat(seq,'#',query_time) then @rn:=@rn+1 when @gid:=concat(seq,'#',query_time) then @rn:=1 end s

  5.     from (

  6.         select query_time,ts,rn,percent,v,v-percent d,seq from (

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

  8.                 select query_time,ts,

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

  10.                 from (

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

  12.                 ) t1

  13.             ) t2 inner join (

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

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

  16.         ) t4 ,

  17.         (select 0.71 v,1 seq uNIOn all select 0.81,2 union all select 0.91,3) t5

  18.     ) t6 where d>=0 order by query_time,v,d

  19. ) t7 where s=1 order by query_time,seq ;


在ssd环境下,上文的SQL运行时长和结果如下.
MySQL如何实现百分位数计算
148.813 s 


前文这个SQL的计算结果是非常精确的
但是计算时间和 采样点数量 有巨大关系. 假如原始数据是100w,三个百分位数的采样,则数据扩张到300w;4个百分位数的采样,则数据扩张到400w.这是因为使用笛卡尔积扩张了数据的缘故.

优化版本:

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

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

  3.     case

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

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

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

  7.     end d

  8.     from (

  9.         select query_time,ts,

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

  11.         from (

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

  13.         ) t1

  14.     ) t2 inner join (

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

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

  17. ) t6

  18. where d is not null

  19. group by query_time,d


结果:
MySQL如何实现百分位数计算
用时:
33.922 秒

感谢你能够认真阅读完这篇文章,希望小编分享的“mysql如何实现百分位数计算”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL如何实现百分位数计算

本文链接: https://www.lsjlt.com/news/62556.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL如何实现百分位数计算
    这篇文章主要介绍了MySQL如何实现百分位数计算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建试验数据,5天每天一百万随机数据,总共50...
    99+
    2022-10-18
  • MySQL百分位数如何计算
    这篇文章主要为大家展示了“MySQL百分位数如何计算”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL百分位数如何计算”这篇文章吧。select...
    99+
    2022-10-18
  • MySQL百分位数计算如何进行优化
    小编给大家分享一下MySQL百分位数计算如何进行优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主要是采用存储过程,在中间计算...
    99+
    2022-10-18
  • java8 如何实现分组计算数量和计算总数
    java8分组计算数量和计算总数 package com.pig4cloud.pigx.admin.api.vo; import lombok.Builder; import l...
    99+
    2022-11-12
  • mysql如何分组统计并求出百分比
    目录mysql分组统计并求出百分比1、mysql 分组统计并列出百分比2、按年龄段分组,并求个年龄段占比mysql求百分比的几种方法函数介绍利用round,format,left与c...
    99+
    2022-11-13
    mysql分组统计 mysql百分比 mysql统计
  • C++实现分数计算器
    分数计算器项目设计,供大家参考,具体内容如下 一、问题描述及功能要求 1、分数计算器程序的每种功能都可以用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相...
    99+
    2022-11-12
  • mysql如何实现累加计算
    小编这次要给大家分享的是mysql如何实现累加计算,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。前言接了一个需求,产品想分析一下用户增长的曲线。也就是某个时间段的每日...
    99+
    2022-10-18
  • java8怎么实现分组计算数量和计算总数
    本篇内容介绍了“java8怎么实现分组计算数量和计算总数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java8分组计算数量和计算总数pac...
    99+
    2023-06-20
  • 如何计算php时间戳位数
    这篇文章主要介绍“如何计算php时间戳位数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何计算php时间戳位数”文章能帮助大家解决问题。php时间戳一般都是10位数。计算php时间戳位数的方法:1...
    99+
    2023-07-05
  • java如何实现数位分离
    目录java数位分离分离整数的各个数位java数位分离 题目: 问题描述  编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。  输入...
    99+
    2022-11-13
  • android计算器实现两位数的加减乘除
    本文实例为大家分享了android计算器实现加减乘除的具体代码,供大家参考,具体内容如下 注:以下计算器只注重实现功能,不考虑其他BUG,只有两位整数的算法运算,适合新手 1、...
    99+
    2022-06-06
    Android
  • Java如何实现分布式实时计算?
    随着互联网时代的到来,数据量呈现爆炸性增长,如何高效地处理这些数据成为了每个企业必须面对的问题。分布式计算是一种解决大规模数据处理的有效方法。本文将介绍Java如何实现分布式实时计算,并且通过演示代码,让读者更好地理解。 一、分布式实时计...
    99+
    2023-10-17
    numy 分布式 实时
  • Java如何实现位运算
    这篇文章主要介绍了Java如何实现位运算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。public class Operation5 {publ...
    99+
    2023-06-02
  • MySQL中如何计算时间相差的分钟数
    在MySQL中,计算时间相差的分钟数是一个非常常见的需求。本文将介绍一些实用的函数,帮助你轻松地计算时间相差的分钟数。 TIMEDIFF函数 TIMEDIFF函数是MySQL中用于计算时间差的函数之一。它的语法如下: e1e2) e1e2...
    99+
    2023-10-20
    mysql 数据库
  • 如何利用Mysql计算地址经纬度距离实时位置
    目录前言思路数据库地址表设计需求实现总结前言 最近在做项目时候,遇到一个这样子的需求, 点到卡包里面卡券使用使用,需要展示卡券使用附近门店, 思路 数据库地址表设计 通用的区域街道...
    99+
    2022-11-13
  • Unix系统如何实现分布式计算?
    在计算机科学领域中,分布式计算是一个重要的概念。它是指将一个计算任务分配给多台计算机处理,从而提高计算效率和处理能力。而Unix系统,作为一个开源的操作系统,也提供了一些方法来实现分布式计算。 一、使用SSH进行分布式计算 SSH(Sec...
    99+
    2023-09-10
    unix 分布式 javascript
  • C语言如何计算一个整数的位数
    目录计算一个整数的位数关于如何获取整数各个位然后知道通过 i/10 便可"清除"个位数计算一个整数的位数 只需要设计一个计时器,因为C语言中除法只留下整数部分,所...
    99+
    2022-11-16
    C语言整数位数 计算整数的位数 C计算一个整数位数
  • MySQL百万级数据大分页查询优化的实现
    目录一、MySQL分页起点越大查询速度越慢二、 limit大分页问题的性能优化方法(1)利用表的覆盖索引来加速分页查询(2)用上次分页的最大id优化三、MySQL百万数据快速生成3....
    99+
    2022-11-12
  • 如何在Java中实现分布式实时计算?
    随着数据量的增长,传统的单机实时计算已经无法满足业务需求。分布式实时计算能够将计算任务分散到多台机器上,从而提高计算效率和可靠性。本文将介绍如何使用Java实现分布式实时计算。 一、什么是分布式实时计算? 分布式实时计算是指将一个大任务分...
    99+
    2023-06-07
    关键字 分布式 实时
  • C语言算法积累分离数位怎么实现
    今天小编给大家分享一下C语言算法积累分离数位怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目:输出一个三位整数的个...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作