窗口函数不仅能实现排序,还能实现累计功能,作用强大。

下面的例子使用窗口函数实现累计功能,看似复杂,但是其实不难,小白也能秒懂!

———————————— 我是例子分界线 ——————————————

有个课程学习类APP,用户可以在上面做题。

不存在没有登录却做题的情况,但是存在登录了没做题的情况。

有一个登录(login)记录表:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了APP。

有一个做题(passing_number)表:

第1行表示user_id为2的用户在2020-10-12在APP上做对了4个题目。

第3行表示user_id为1的用户在2020-10-13在APP上做对了0个题目。

还有一个用户(user)表:

现在需要查询做题信息,包括: 用户的名字,以及截止到某天,累计总共做对过多少题,并且查询结果先按照日期升序排序,再按照姓名升序排序,有登录却没有做对题的那天的数据不需要输出。

输出需要像下面这样的效果:

————————————— 我是题解分界线 ———————————————

要统计用户截止到某天总共做对的题数,用窗口函数是其中一种简洁的解法。首先,用窗口函数从passing_number表筛选出,每个用户在登录过的每个日期(日期按从小到大顺序排列),做对的题目的累计值。

select user_id,date,
sum(number) over(partition by user_id order by date)  ps_num 
from passing_number

把上面的查询语句命名为表a,和user表连接,得到用户的名字。因为要先按照日期升序排序,再按照姓名升序排序,所以最后order by date,u_n。

所以最后完整的查询语句为:

select u.name u_n,a.date date,a.ps_num ps_num from
(select user_id,date,
sum(number) over(partition by user_id order by date) ps_num
from passing_number)a
join user u on u.id=a.user_id
order by date,u_n

有木有发现根本没用到login表?因为有登录却没有做对题的那天的数据不需要输出,所以login表只是虚晃一枪,是个多余条件!小伙伴们有木有想复杂呢?大神们还有木有更好的解法分享?

SQL窗口函数-截止至某天的累计值相关推荐

  1. sql 按日期或按顺序统计累计值

    sql 按日期,或按顺序,统计每一天的累计值. 效果如图表名table,左边红框框代表每天的arpu值,右边为每天的累计arpu值. CREATE TABLE table1 AS select b.p ...

  2. 【SQL】窗口函数:求数据的整体百分比、整体累计值,组内累计值和组内累计百分比...

    〇.概述 1.所需资料 窗口函数实现组内百分比.累计值.累计百分比:https://blog.csdn.net/weixin_39751959/article/details/88828922 2.背 ...

  3. 窗口函数:实现组内百分比、累计值、累计百分比

    0 前言 最近做数据分析,需要求每一组内的元素的百分比以及累计百分比,实在想不出怎么使用sql实现,就先将数据导出,然后使用excel计算.趁着夜深人静的时候,思维敏捷,尝试一下使用窗口函数实现一下, ...

  4. SQL窗口函数-聚合窗口函数

    关于窗口函数的基础,请看文章SQL窗口函数 许多常见的聚合函数也可以作为窗口函数使用,包括AVG().SUM().COUNT().MAX()以及MIN()等函数. 案例分析 案例使用的示例表 下面的查 ...

  5. MySQL - SQL窗口函数

    1.应用场景 窗口函数解决的问题包括: 1)排名问题 2)top N问题 应用工作中, 面试中. 2.学习/操作 前言 MySQL版本8已支持窗口函数这个功能, 如果低于该版本, 会出现SQL报错! ...

  6. 用sql语句实现按时间求累计值

    用sql语句实现按时间求累计值 日期             数值 <?xml:namespace prefix = st1 />2005-5-1      2.4 2005-5-2    ...

  7. Hive SQL 窗口函数

    本文首发:大数据每日哔哔-Hive SQL 窗口函数 Hive 的窗口函数 在 SQL 中有一类函数叫做聚合函数,例如 sum().avg().max().min() 等等,这类函数可以将多行数据按照 ...

  8. python 窗口函数_太好用了!Python中8种流行的SQL窗口函数了解一下!

    有关如何在业务分析中利用Pandas来有效复制最常用的SQL窗口函数的教程. 任何致力于构建公司KPI或创建分析随着时间推移的业务绩效的数据分析人员都知道SQL窗口功能是一个强大的工具.使用它们的真正 ...

  9. SQL 窗口函数速查表

    文章目录 窗口函数概述 PARTITION BY ORDER BY 窗口大小 SQL 子句逻辑执行顺序 常用窗口函数 排名窗口函数 取值窗口函数 聚合窗口函数 大家好!我是只谈技术不剪发的 Tony ...

最新文章

  1. 坚果 android 系统升级,坚果手机的系统是什么?坚果手机能升级安卓5.0吗?
  2. 保证可见性_基于广告可见性的可见曝光数据建设实践
  3. [bzoj 2456]mode
  4. android后台如何动态添加图片,android – 如何从JSON数组动态地向ImageView添加图像...
  5. 2012 Multi-University #8
  6. [Leetcode][第112题][JAVA][路径总和][递归][队列]
  7. Android动画类型
  8. Linux基础知识-文件管理
  9. !!! SQL 数据库开发基础 传智!
  10. C#中Abstract和Virtual
  11. [强化学习实战]深度Q学习-DQN算法原理
  12. Win32反汇编(四)栈的工作原理与堆栈平衡,函数方法参数的调用约定
  13. 无法正确检查该计算机的授权,一个问题阻止windows正确检查此机器的许可证,错误代码ox80070002...
  14. YOLO Air:科研改进论文推荐 | 改进组合上千种搭配,包括Backbone,Neck,Head,注意力机制,适用于YOLOv5、YOLOv7、YOLOX等算法
  15. android reboot 消息,android reboot 流程
  16. 在SSH会话中如何实现 X11 Forwarding
  17. 小米MIX进入和退出Recovery模式、Fastboot模式各种方法
  18. 服务器常用语言,计算机常用词汇--语言及服务器篇
  19. 2021年2月8日 抖音直播后端开发实习面经
  20. H264码流的 ps封装

热门文章

  1. 向外国大师学习敏捷式开发?嫦娥掩面而笑
  2. Go 使用for range time.Tick() 设置定时器
  3. 机器学习:流形学习Manifold Learning之LLE(局部线性嵌入)
  4. 使用dockerfile将应用镜像化,及error context checking错误解决方法。
  5. 想入门CATIA二次开发CAA的盆友看过来(谈谈开发经验,或许对你有帮助!)
  6. 2019ICPC上海网络赛A 边分治+线段树
  7. Oracle EBS R12 AP模块主要表结构整理
  8. Pytorch 之修改Tensor部分值
  9. STM32f1之简单控制继电器模块(附源码)
  10. 阿里云认证资格考试,yyds!