背景

  每天一早到公司,第一件事就是打开各种报表,查看平台运行情况。到了周末,睡完懒觉还是得爬起床远程回公司看报表数据。于是在周末的时候,将娃哄睡之后,开始着手写一下统计sql,定期执行后将结果汇总推送到企业微信。

  问题就出现在“汇总”这个事。众所周知 sql的group by 能做分组统计,但是分组后还得再执行一次sql将结果汇总一遍,才能将分组统计结果加起来。如下面的SQL:

select status as '状态' , count(1) as '任务数'
from action_history
where create_time >= '2022-04-17' and create_time<'2022-04-18'
group by status

  执行结果两列,一列是任务执行状态,第二列的任务执行次数。任务共有5种状态,如果想将这5种状态对应的次数都起来的话,口算不好的我有点难度。这时,可以再执行一个count(1)的sql,查出所有记录数进行汇总。但是这种方式需要执行两次sql,太不优雅了。

  想着这实在太麻烦了,而且这是个常用的场景,数据库大神们肯定不会按捺得住不将这场景覆盖到的。于是一个个mysql函数地找,终于找到了个宝藏涵数,完美解决了汇总的需求。

COALESCE函数

  这个宝藏涵数就是COALESCE了,只要对上面的sql稍微修改一下,就能在之前的sql执行结果里自动加一行汇总,简直不要太好用了。修改后的SQL如下:

select COALESCE(status, '汇总') as '状态',count(1) as '任务数'
from action_history
where create_time >= '2022-04-17' and create_time<'2022-04-18'
group by status WITH ROLLUP

  将 select 里的 status 改为 coalesce(status, '汇总'),在 group by status后面加上 with rollup,即可实现我要的汇总效果:

with rollup

  有经验的童鞋应该发现,实际上起作用的,不是coalesce函数,而是group by后面的 with rollup配置。coalesce函数的作用,其实是返回第一个非空的值。如不加这个涵数,新加的汇总那一行,“汇总”两字会被设置为“NULL”,为了好看,使用coalesce将“NULL”替换为“汇总”。魔法到此结束。

额外的坑

  使用with rollup进行汇总统计时,对于count、sum等这些统计函数的确好用,但是如果count(distinct xxx)这样用的话,汇总的结果会不准。

参考资料

MYSQL函数

MYSQL分组

MYSQL中自动加一行汇总相关推荐

  1. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) 返回大于x的最小整数值 exp(x ...

  2. PHP自动加载类和方法,在PHP中自动加载类的最佳方法

    请,如果您需要自动加载类 – 使用命名空间和类名称约定与SPL自动加载,它将节省您的重构时间. 当然,您将需要将每个类作为对象进行实例化. 谢谢. 或者像这样(我在我的一个项目中): spl_auto ...

  3. SpringBoot项目中自动加载datasourceConfig配置导致启动失败

    在自己学习搭建SpringBoot的项目中并没有使用到数据库,但在启动的时候报没有找到数据源,网上查了一下发现原因是SpringBoot项目启动时会自动加载datasourceConfig配置 经过尝 ...

  4. MYSQL中日期加减(前一天、后一天等)以及格式化的函数

    文章目录 序言 日期的加减 date_add和date_sub 日期的格式化 date_format 日期的差值 datediff timestampdiff 序言 最近在写定时任务,查询条件中反复的 ...

  5. php如何实现自动加载mp3,PHP中自动加载的几种实现

    PHP自动加载是一个很有用的技巧,我们应该在项目中尽量使用autoload来减少维护类加载的工作. 使用__autoload 在使用PHP的项目中,如何实现自动加载对于新人总是一个很疑惑的问题,一般写 ...

  6. mysql中时间加1怎么弄,mysql 日期加减

    mysql日期加减 一.MySQL 为日期增加一个时间间隔:date_add(). 1.  示例: set @dt = now(); select date_add(@dt, interval 1 d ...

  7. mysql加上判断_在mysql中where加if判断

    在mysql中where中多重条件if判断,项目需求如下: 好友关系中本身具有A,B,C三种角色,好友动态分为1,2,3,4,5种类型.A是必须具有的角色,如果具有A角色可查好友动态类型1,3,4 的 ...

  8. mysql中怎么加全文索引_MySQL添加全文索引(一)

    1.ngram and MeCab full-text parser plugins 全文检索在MySQL里面很早就支持了,只不过一直以来只支持英文.缘由是他从来都使用空格来作为分词的分隔符,而对于中 ...

  9. MySQL查询结果条数编号示例 mysql 查找结果中自动加序号列

    SELECT @row := @row + 1 as row, t.id FROM sgcorp_product t, (SELECT @row := 0) r where t.id not in(s ...

最新文章

  1. Nature:承磊/李猛等发现产甲烷古菌的碳代谢新途径
  2. UART_RECV详细设计方案
  3. showModalDialog页面
  4. Angular4.0环境搭建详解--windows系统环境
  5. python animation set data_imshow.set_数据()不适用于FuncAnimation
  6. 2018年1月19日 第七次小组会议
  7. php中crypt怎么还原,PHP笔记 —— crypt方法
  8. Maven+Eclipse+SparkStreaming+Kafka整合
  9. IBatis的resultMap使用
  10. 博弈论——选举/投票(voting)
  11. 友盟推送:测试模式推送完成,但却收不到推送信息
  12. 6大常见家谱样本,尤其第4个,深受各大名门望族的喜爱!
  13. Python Computer Vision Programming学习笔记(一)——Python以及各Package安装
  14. 小鑫の日常系列故事(七)——小纸条
  15. DQM Serial Sync Index Program ERROR
  16. 经典的Times 33 哈希算法
  17. 最全的Windows7 服务优化、详解。
  18. lol查询服务器角色信息,游戏账号角色查询
  19. [转载]ExtJs4 笔记(4) Ext.XTemplate 模板
  20. 新手福音!最全面的易懂CSS总结,一篇博文让你了解CSS,动一动小手收藏吧

热门文章

  1. mysql connectionstrings_「connectionstrings」C#连接数据库时Appsettings 与connectionStrings的区别 - seo实验室...
  2. JavaScript——点击事件按钮使div变色
  3. Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)
  4. 企业网三层架构(内网结构)
  5. 人、狼、羊、草过河的小游戏Python实现
  6. Starday作为增速快的电商潜力市场 ,入驻商户能够轻松实现旺季“躺平”
  7. openssl升级到1.0.1o的过程
  8. 什么是 Log4j 缺陷,它对您有何影响?
  9. zzuli:1049平方和与立方和
  10. 【mmdetection实践】(三)使用华为云安装训练mmdetection