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

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

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

有个课程学习类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. 利用numpy对已知样本点进行多项式拟合
  2. Shell编程基础---shell的结构、执行及变量
  3. atitit.词法分析的实现token attilax总结
  4. spring集成struts2
  5. 【源码】2012年斗地主结构算法公布(斗地主结构算法)
  6. Hadoop DataNode : Address already in use
  7. visual studio 2017 连接 SQL Server
  8. Docker如何更改存储库名称或重命名图像?
  9. 用CentOS 6快速配置一台企业级Web代理服务器
  10. 单源最短路(spfa+Dijkstra)附数据
  11. 【读书笔记《Android游戏编程之从零开始》】9.游戏开发基础(如何快速的进入 Android 游戏开发)
  12. 老男孩Python 第7期 老男孩Python培训视频教程
  13. ADCS relay
  14. dnf第七章waiguaⅢ∨dnf第七章好感度【=dnf第七章免费外挂
  15. 去八达岭看红叶(攻略)
  16. 【Proteus仿真】51单片机+直流电机PWM调速实验
  17. win32 8.2 使用通用对话框
  18. WebRTC学习06----1对1视频通信实例
  19. 考虑分布式光伏储能系统的优化配置方法(源码公开)
  20. 【已解决】购买新电脑激活office时微软账号出现异常怎么办?

热门文章

  1. 《CCIE路由和交换认证考试指南(第5版) (第1卷)》——1.5节SPAN、RSPAN及ERSPAN...
  2. 【有利可图网】PS实战教程35:用PS快速抠透明的水花
  3. @zxing/library插件在H5页面上调用摄像头进行扫码识别解决方法,以及对华为手机的兼容
  4. 【fake location破解版】加强版随风2.0定位助手使用方法
  5. 01 | Linux详细简介
  6. PostgreSQL的ON CONFLICT
  7. 看纷享销客如何布局连接型CRM
  8. 微信Mac版 v3.0.0正式版上线!mac电脑上也能在朋友圈点赞和互动!
  9. frp Connection refused
  10. 树和二叉树的基本概念和相关计算