前两天的那篇内容《MySQL递归实现单列分列成多行》,在公众号没什么反响,但是在百度收到了很好的效果,目前400多的读者中,收藏用户100个,收藏率是21%,还是很高的了;而且阅读完成率是79%,这就更让人意外了。所以今天想再来一篇看看效果如何。

今天的内容还是一个常见的SQL面试题。问题是这样的,现在只有三个渠道(公众号、抖音、知乎)每天的累计粉丝数据,需要查询每天每个渠道新增用户的数据,数据如下↓

实现的思路是,把每个渠道数据找出来分组,然后按日期进行排序,求出日期前一天的累计粉丝数量,在用当天的数据减去前一天的数据就可以了。看到这里,应该就知道了,使用窗口函数里面的LAG语句就可以了,然后使用channel进行PARTITION BY,日期升序就行了,SQL语句和结果如下↓

SELECT  f.*,  LAG(cum_fans,1) OVER(PARTITION BY channel ORDER BY c_date ASC) AS last_day_cfansFROM  `channel_fans` AS f

这样我们已经求出了每个渠道每天累计的数量,然后只需要进行相减即可,SQL语句和结果如↓

SELECT  f.*,  LAG(cum_fans,1) OVER(PARTITION BY channel ORDER BY c_date ASC) AS last_day_cfans,  f.cum_fans - LAG(cum_fans,1) OVER(PARTITION BY channel ORDER BY c_date ASC) AS add_fansFROM  `channel_fans` AS f

仔细看结果,是有点问题的,每个渠道第一天的数据是没有的,因为MySQL里面null是个特殊的值,任何数据和它进行运算返回值都是Null。所以我们还需要再完善一下,有两种方式,可以通过IFNULL进行判断,如果是Null就返回0;第二种方式是在LAG里面加入第三个参数,第三个参数是默认值,我们加个0就可以了,SQL语句个结果如下↓

SELECT  f.*,  LAG(cum_fans,1,0) OVER(PARTITION BY channel ORDER BY c_date ASC) AS last_day_cfans,  f.cum_fans - LAG(cum_fans,1,0) OVER(PARTITION BY channel ORDER BY c_date ASC) AS add_fansFROM  `channel_fans` AS f

好了,到此已经完美解决了问题,窗口函数是个非常好用的系列函数,在做数据预处理的时候能做出很大贡献,可以参考《MySQL窗口_序号函数》、《MySQL窗口_分布、前后、头尾函数》、《MySQL窗口函数_聚合函数》这三篇。

好了,如果能看到最后,又是一个PowerBI使用者的话,再给一个建议。如果是使用数据库,数据需要做预处理,在数据库里面做预处理不仅效率更高,而且可以让PowerBI节约更多的空间,所有PowerBI使用者数据库还是需要掌握的。

End

◆ PowerBI_RFM客户关系模型

◆ PowerBI饼图、圈图、旭日图

◆ Excel时间序列预测函数

◆ Python操作MySQL数据库

◆ Python企业微信机器人

MySQL通过累计求新增相关推荐

  1. mysql 高手_求mysql高手

    关于 求mysql高手的搜索结果 问题 求MYSQL数据库中关于CREATE SCHEMA的问题 如题.求MYSQL数据库中关于CREATE SCHEMA的详解!我是刚开始接触MYSQL 和 PHP ...

  2. MySQL 在指定位置新增字段

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8273208 ...

  3. mysql中如何求字段的个数字_求高手帮小弟解决一下!关于mysql字段中数字提取求和的问题?...

    例如表1中的No字段是字符串类型,no字段中包含数字及符号,如20+1.5,8+5+4等 那么有办帮法提取出20,1.5,8,5,4这些数字来进行求和等于38.5吗?语句怎么样写? 解决方案 30 提 ...

  4. MySQL各部门求最值_mysql 求分组最大值的十个解法

    mysql 求分组最大值的十个解法 发布时间:2020-08-08 23:32:28 来源:51CTO 阅读:1383 作者:努力的C "How to solve the same prob ...

  5. mysql 管理端口_MySQL8新增管理端口

    简介 用过MySQL数据库朋友一定对"ERROR 1040 (HY000): Too many connections",这个报错不陌生,出现这个报错的原因有两种情况,一种是单个用 ...

  6. MySQL 5.7.12新增MySQL Shell命令行功能

    2019独角兽企业重金招聘Python工程师标准>>> 在最新发布的MySQL 5.7.12中有许多令人兴奋的新功能,对于MySQL开发者来说,最令人兴奋的莫不是新增的MySQL S ...

  7. MySQL 生成累计乘积

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考: scott建表及录入数据sql脚本 一.需求 计算某给数字列的累乘积.其操作方式与"计算累计和& ...

  8. MySQL实现累计求和

    思路:其实实现累计的核心就是将相同的表在做一次关联,让里面的值作为比较参数. 一.按天累加 需求1:合同表按天汇总ROW_ID 数据库:mysql 5.7 表名:lnk_agreement 字段:cr ...

  9. MySQL 8.0.31 新增支持SQL标准中的交集(INTERSECT)和差集(EXCEPT)表操作符

    文章目录 概览 准备工作 交集( INTERSECT ) 差集( EXCEPT) 旧版本中交集.差集操作是如何实现的 总结 概览 最近的 MySQL 版本( 8.0.31 ) 中,新增了对 SQL 标 ...

最新文章

  1. python+requests+unittest+excel_接口自动化测试 unittest+request+excel(踩‘坑’)
  2. iOS后台下载功能(收集)
  3. 【深度学习】基于Pytorch进行深度神经网络计算(一)
  4. mysql可视化工具-navicat的下载和使用
  5. 不扯淡学数据库实践联系理论-课程
  6. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0
  7. 水晶报表-横向设计页面,设置网格高度
  8. “图片”--上传(文件上传一致,单文件)
  9. FileZilla是一种快速 FTP 上传
  10. iOS根据模型获取模型字段以及字段的类型(用于创建数据库的表)
  11. HDU 5306 线段树
  12. 计算机类毕业设计评语导师评语,本科生毕业设计导师评语参考
  13. 网络图片爬虫(几个简单步骤实现网页图片的爬取,详细步骤,超详细,简单易懂)
  14. 看不懂简明python教程_简明python教程的读书笔记(一)
  15. 佛祖保佑永无BUG 神兽护体 代码注释(各种版本)
  16. 重磅消息!微信Windows电脑版本,终于支持刷朋友圈啦!
  17. iperf和iperf3测速使用
  18. 推荐一个开源快速开发erp管理系统的框架
  19. C语言基础知识点汇总(一)
  20. iOS开发,导入c文件引发的Could not build module 'Foundation'问题

热门文章

  1. 浅析“分布式锁”的实现方式丨C++后端开发丨底层原理
  2. 普通断路器PS智能微型断路器
  3. 网上商城系统JavaWeb购物商城 商城项目Servlet+JSP+MySQL
  4. 破解emlog pro的注册码机制
  5. 第一个应用:鸢尾花分类
  6. 【观察】还在炒作“烧屏”这个老梗?三个维度看OLED的“势不可挡”
  7. 精通C语言Java怎么样_作为一个优秀的程序员,真的需要精通C语言吗?
  8. PHP中session什么意思_PHP中Session的概念
  9. android 动态壁纸设计
  10. 开源自动化测试平台介绍一览