广告
返回顶部
首页 > 资讯 > 数据库 >mysql累加计算实现方法详解
  • 636
分享到

mysql累加计算实现方法详解

mysql累加计算 2022-06-01 01:06:25 636人浏览 薄情痞子
摘要

本文实例讲述了Mysql累加计算。分享给大家供大家参考,具体如下: 前言 接了一个需求,产品想分析一下用户增长的曲线。也就是某个时间段的每日总人数列表。好对近期活动进行一个效果的评测。这个统计sql还是花了我一小段时

本文实例讲述了Mysql累加计算。分享给大家供大家参考,具体如下:

前言

接了一个需求,产品想分析一下用户增长的曲线。也就是某个时间段的每日总人数列表。好对近期活动进行一个效果的评测。这个统计sql还是花了我一小段时间的。mysql统计这个还是需要一定的技巧的。

需求分析

user_id reg_time
1 2019-09-03
2 2019-09-04
3 2019-09-04
4 2019-09-05
5 2019-09-05
6 2019-09-06

假如上表user_info,我们很容易根据时间维度统计出每日新增的人数。sql如下:


select reg_time, count(user_id) daily_quantity
 from user_info
group by reg_time 

通过上面的sql我们很容易得出以下列表:

reg_time daily_quantity
2019-09-03 1
2019-09-04 2
2019-09-05 2
2019-09-06 1

但是这个并不是我们想要的结果。我们想要的应该是 上一天的总人数加上今天的净增长数,以此类推。也就是我们想要:

reg_time daily_quantity
2019-09-03 1
2019-09-04 3
2019-09-05 5
2019-09-06 6

这就有点棘手了,我们需要进行累加计算。我尝试了自链接,函数等一些操作后还是没有得到一个正确的结果。这时想到如果是java代码处理这个就再合适不过了,我们只要声明初始值,然后循环累加就能计算出结果了:



 public static void main(String[] args) {
  int[] arr = {1, 2, 2, 1};

  int[] ints = dailyQuantityArr(0, arr);


  for (int i : ints) {
   System.out.println("i = " + i);
  }


 }


 public static int[] dailyQuantityArr(int base, int[] dailyIncrQuantity) {


  int[] result = new int[dailyIncrQuantity.length];
  // 累加填充
  for (int i = 0; i < dailyIncrQuantity.length; i++) {
   base += dailyIncrQuantity[i];

   result[i] = base;

  }
  return result;
 }

上面的伪代码就可以计算出结果。当然如果可以的话尽量在java业务代码进行这种复杂运算。但是产品给出的需求是我们能够提供一句sql能够直接在可视化数据引擎中得出他要的答案。于是从上面的代码得出灵感。
mysql是否有这种变量呢? 有!当然有。记得很普遍的场景,以前经常有业务需要我们输出序号,oracle是自带一个伪列rownum,但是mysql没有。mysql通常通过声明自增变量来生成序号。拿user_info表举例子:


select (@i:=@i+1) as rownum, user_id 
 from user_info ,(select @i:=0) as r

Mysql 用户变量

mysql 变量分为 局部变量、用户变量、会话变量、全局变量 。上面的语句我们使用的是用户变量。用户变量与数据库连接有关,在连接中声明的变量,在存储过程中创建了用户变量后一直到数据库实例接断开的时候,变量就会消失。在此连接中声明的变量无法在另一连接中使用。
MySQL中用户变量不用事前申明,使用的时候以@varname的格式进行声明。通过:=或者=进行赋值操作。如果需要对外输出需要用select关键字,而且赋值必须使用:=

使用Mysql用户变量进行累加计算

我们学习了用户变量后就知道如何进行累加计算了,那么user_info表的日累计总人数应该是这样的:


 
 select a.reg_time,
    a.daily,
   @i:=@i+a.daily as daily_quantity 
  from (select reg_time ,  
  count(user_id) daily 
  from user group by reg_time ) a ,
  (select @i:=0) b

查询的结果如下,符合逻辑需要。

reg_time daily daily_quantity
2019-09-03 1 1
2019-09-04 2 3
2019-09-05 2 5
2019-09-06 1 6

但是这里有一个小坑,在实际业务中@i初始化的时候有可能不为0,比如我们统计上面9月4号到9月6号这时候之前的总人数为1 。 这个要特别注意。实际业务开发中如果我们能在逻辑编码中实现还是建议在逻辑编码中进行一些复杂的运算。

总结

今天我们通过mysql用户变量解决了一个在sql中累加计算的问题。不知道你有没有其它好的思路呢?欢迎留言讨论。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文档:

--结束END--

本文标题: mysql累加计算实现方法详解

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

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

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

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

下载Word文档
猜你喜欢
  • mysql累加计算实现方法详解
    本文实例讲述了mysql累加计算。分享给大家供大家参考,具体如下: 前言 接了一个需求,产品想分析一下用户增长的曲线。也就是某个时间段的每日总人数列表。好对近期活动进行一个效果的评测。这个统计sql还是花了我一小段时...
    99+
    2022-06-01
    mysql 累加计算
  • mysql如何实现累加计算
    小编这次要给大家分享的是mysql如何实现累加计算,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。前言接了一个需求,产品想分析一下用户增长的曲线。也就是某个时间段的每日...
    99+
    2022-10-18
  • GoJava算法之累加数示例详解
    目录累加数方法一:穷举法(java)方法二:深度优先遍历(go)累加数 累加数 是一个字符串,组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最...
    99+
    2022-11-11
  • java多线程累加计数的实现方法
    题目 给定count=0;让5个线程并发累加到1000; 思路 创建一个类MyRunnable,实现Runnable(继承Thread类也可) 定义一个公共变量...
    99+
    2022-11-12
  • JavaScript实现累加的方法
    这篇文章主要介绍JavaScript实现累加的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! JavaScript实现累加的方法:1、通过“for(v...
    99+
    2022-10-19
  • BigDecimal的加减乘除计算方法详解
    目录BigDecimal的运算——加减乘除 首先是bigdecimal的初始化加法 add()函数     减法subtract()...
    99+
    2022-11-12
  • 怎么在Python中实现一个时间累加计算器
    本篇文章给大家分享的是有关怎么在Python中实现一个时间累加计算器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的数据类型有哪些python的数据类型:1. 数字...
    99+
    2023-06-14
  • Pytorch-mlu 实现添加逐层算子方法详解
    目录1、注册算子2、算子分发3、修改 OpMethods 基类4、下发算子5、添加 wrapper6、添加 wrapper7、算子测试本教程分享了在寒武纪设备上 pytorch-ml...
    99+
    2022-11-12
  • java实现的DES加密算法详解
    本文实例讲述了java实现的DES加密算法。分享给大家供大家参考,具体如下:一、DES加密算法介绍要求密钥必须是8个字节,即64bit长度因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用加密、...
    99+
    2023-05-31
    java des 加密算法
  • Android实现加法计算器
    本文实例为大家分享了Android实现加法计算器的具体代码,供大家参考,具体内容如下 布局 <?xml version="1.0" encoding="...
    99+
    2022-06-06
    Android
  • Mysql按条件计数多种实现方法详解
    最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况。尝试了几种方法,下面简要记录,供大家参考。 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景。 从前有一个皇帝,他有50个妃子,这...
    99+
    2022-05-25
    Mysql 条件计数
  • c语言实现1~n累加求和的方法
    这篇文章给大家分享的是有关c语言实现1~n累加求和的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。for循环,语法“for(i=1;i<=n;i++){s=s+i;}”;2、while循环,语法“whi...
    99+
    2023-06-14
  • Vue计算属性与监视属性实现方法详解
    目录一、计算属性1、插值语法实现2、通过方法实现3、通过计算属性二、监视属性三、深度监视一、计算属性 在开发中,可以有这样的需求,在属性(date)中,有fistName和lastN...
    99+
    2022-11-13
  • java GUI实现加法计算器
    本文实例为大家分享了java GUI实现加法计算器的具体代码,供大家参考,具体内容如下 1.写出一个简易计算器需要的组件 2.先出监听事件类 public class TextC...
    99+
    2022-11-12
  • 五种C程序计算阶乘方法 c语言实现1到n的阶乘1*2*3*.....*n的累乘计算,使用不同方法实现,五种计算阶乘的方法
    题目: 题目分析:        首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n! 具体的操作: 利用循环解决问题,设循环...
    99+
    2023-10-21
    c++ c语言 python java c#
  • Java利用位运算实现加减乘除的方法详解
    目录前言一、常见位运算1. &运算2. |运算3. ^运算4. ~运算二、位运算实现加法三、位运算实现减法四、位运算实现乘法五、位运算实现除法前言 我们经常使用的加减乘除,我...
    99+
    2022-11-13
  • Golang实现AES对称加密算法实例详解
    目录前言前置知识生成随机数生成随机字符串加密和解密加密解密总结前言 安全总是相对的,对于敏感数据最好要有一定保护措施,尤其是在线数据,通过加密可转换信息为编码,从而防止非法获取。对开...
    99+
    2023-02-21
    golang 对称加密 go语言aes加密 对称加密 aes
  • C++实现算法两个数字相加详解
    Add Two Numbers 两个数字相加 You have two numbers represented by a linked list, where each n...
    99+
    2022-11-12
  • C语言算法积累加tag的循环队列怎么实现
    这篇文章主要讲解了“C语言算法积累加tag的循环队列怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言算法积累加tag的循环队列怎么实现”吧!题目:若希望循环队列中的元素都能得到利...
    99+
    2023-06-30
  • TF-IDF算法解析与Python实现方法详解
    TF-IDF(term frequencyinverse document frequency)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权...
    99+
    2022-06-04
    算法 详解 方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作