c++ 编写函数返回两个值最小值_结合实例来分析SQL的窗口函数

这篇主要是用举栗子的方式来理解SQL中的窗口函数,加深大家对SQL窗口函数的理解。

ea2117b17c6d5b1963106fc58f49a86f.png
样例表

这个样例表是我为了好理解,随便设计的,不符合数据库设计的三范式,请忽略。


(一)标准聚合函数

标准的聚合函数有avg、count、sum、max和min,接下来分别介绍这些聚合函数的窗口函数形式。

1、移动平均窗口函数

移动平均值的定义:若依次得到测定值(x1,x2,x3,...xn)时,按顺序取一定个数所做的全部算数平均值。例如(x1+x2+x3)/3,(x2+x3+x4)/3,(x3+x4+x5)/3,....就是移动平均值。其中,x可以是日或者月,以上的可以成为3日移动平均,或3月移动平均,常用于股票分析中。

语法结构:

avg

影响行数的范围(限定计算移动平均的范围):

rows 

以v_info举个例子吧

SELECT *,AVG(grade) OVER(ORDER BY stu_no ROWS BETWEEN 2 preceding AND CURRENT ROW) AS '三移动平均'
FROM v_info

8f3d720d86c9f6461dee7f83a49c0252.png
  • 对于第一行来说,没有前面两行,所以值就为当前行的值
  • 对于第二行来说,前面只有一行,所以三移动平均就为第一行和第二行的平均值

影响行数范围的语句在标准的聚合函数中都适用。

2、计数(count)窗口函数

窗口 函数 count(*) over() 对于查询返回的每一行,它返回了表中所有行的计数。

语法结构:

count

(1)查询出成绩在90分以上的人数

SELECT 

a744877a2456de7c3f737ab2de4ccb51.png

这个结果说明,成绩大于90分的,有两位同学。

(2)按照课程号进行分组,找出成绩大于等于80分的学生人数

SELECT 

9259fd6fd95eb90de6976bd241947395.png

从结果上可以看出,课程号为“0001”的学生人数有2名;课程号为“0002”的学生人数有2名;课程号为“0003”的学生有3名。

3、累计求和(sum)窗口函数

语法结构:

sum

(1)根据学号排序,对学生的成绩进行累积求和

SELECT 

6fb21bf5c4a99d0fa915bf8d97c0d069.png

(2)按照课程号分组,然后根据学号对成绩进行累积求和

SELECT 

530696f119b7a7cdef1c2e758a4ef0e3.png

tips:一定要选择根据学号排序,要不然得出来的是最终的累积求和结果,如下图:

SELECT 

fb31809efa9a101c65221982c06785ad.png

4、最大(max)、最小值(min)窗口函数

语法结构:

max(字段名1) over(partition by 字段名2 order by 字段名3 asc/desc) min(字段名1) over(partition by 字段名2 order by 字段名3 asc/desc) 

(1)求成绩的累积最大值和累积最小值

SELECT 

abcd547620b2eed93bb08e74705d6b68.png

按照学号进行排序,在累积最大值中,会依次往下找最大值,如果有比当前值大的,就更新,若没有就保持当前;最小值同理。

(2)按照课程号进行分组,再求最大、最小值

SELECT *,MAX(grade) OVER(PARTITION BY c_no ORDER BY stu_no) AS '累积最大值',MIN(grade) OVER(PARTITION BY c_no ORDER BY stu_no) AS '累积最小值'
FROM v_info

21636093d5594199bb4fb9f1e9ff1acd.png

(3)根据学生号和课程号求成绩的累积最小值

SELECT 

e29c2f6a35006988bcbf190e04241471.png

从上图可以看出,对于stu_no,c_no分组,后面没有一样的分组,所以每个stu_no,c_no都是一组,所以累积最小值就是当前的成绩值。

(4)统计2019年10月1日-10月10日每天做新题的人的数量,重点在每天。

  • 这个题的重点是在每天,所以需要求出count(时间)=10的用户ID;
  • 这个题可以使用min() over()窗口函数,先根据每个做题者和试卷号,找出每个做题者的最小日期,这里和前面(3)的解题思路是一样的;
  • 如果每天都做题,那么得到的日期是不一样的,所以count(时间)会等于10;
  • 再对这部分的用户ID进行求和,就可以找出每天都做新题的人了。
SELECT 

(二)排序窗口函数

我在之前就更新过了,这里就不重复写了,感兴趣的可以点链接,去看我之前写的文章。

草莓女孩:SQL中常见的面试题​zhuanlan.zhihu.com

(三)分组排序窗口函数

可以按照销售额的高低、点击次数的高低,以及成绩的高低为对用户和学生进行分组,这里的考点是:取销售额最高的25%的用户(将用户分成4组,取出第一组)、取成绩高的前10%的学生(将学生分成10组,取出第一组)等等。

语法结构:

ntile
  • ntile(n),用于将分组数据按照顺序切分成n片,返回当前切片值
  • ntile不支持rows between的用法
  • 切片如果不均匀,默认增加第一个切片的分布

(1)取出成绩前25%的学生信息

  • 第一步:按照成绩的高低,将学生按照成绩进行切片
SELECT 

b6a68c9feb450d6e9cd71e33238ee14a.png
  • 第二步:按照rank筛选出第一组,则得到最终的结果如下:
SELECT 

a31a9f304f7dc49224616e1d6f066160.png

(四)偏移分析窗口函数

lag() over()和lead() over()窗口函数,lag和lead分析函数可以在同一次查询中取出同一个字段的前N行数据(lag)和后N行(lead)作为独立的列。

在实际应用当中,若要用到取今天和昨天的某字段的差值时,lag和lead函数的应用就显得尤为重要了。

适用场景:获取用户在某个页面停留的起始与结束时间

语法结构:

lag

(1)向前推1个日期

SELECT 

dbb5d8af9ae4399daa0cbcba53bdae78.png
  • 第一条记录,往前推没有,则为0,因为我设置了为0,默认为NULL;
  • 第四条记录是在男生组里,所以也相当于第一条记录,所以也为0;

(2)向后推1个日期

SELECT 

0ec4a61353e1265c8fe8b912479fa9d1.png
  • 在女生组里,第三条记录往后推1个日期是没有的,所以为无;
  • 在男生组里,最后一条记录网后也是没有的,所以也为无。

(3) 统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻。

用户行为表racking_log(user_id,operate_id,log_time)

解题思路:

  • 先根据用户ID和日期,用LEAD()窗口函数向后获取下一步的步骤;
  • AB必须相邻,则表明当前的步骤为A,而下一个步骤为B,即A向下移的步骤是B;
  • “每天”,即根据日期进行分组。
SELECT 

(4)现在有某个登录表,找出连续登录7天以上的用户(看SQL面试题一)

草莓女孩:SQL面试题(一)​zhuanlan.zhihu.com

tips:窗口函数和普通函数的区别在于:普通聚合函数结果返回的是一条,将多条记录合成一条,而窗口函数是有几条记录就返回几条。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成功使用机器学习技术的3个技巧

摘要: 本文讲述了3个针对机器学习的小技巧,相信对正在学习机器学习的朋友有所帮助机器学习、自然语言处理(NLP)和认知搜索技术正以高速率被采用,这并不稀奇。随着组织努力创造价值,增强客户体验,遵守严格的规定并使自己…

用友u8年度账文件服务器错误,用友u8erp软件出纳管理模块年度数据结转常见问题...

用友u8erp软件也有单独的出纳管理模块,有关出纳管理模块年年度数据结转的问题今天小辣妹给大家总结一下。问题现象:12月出纳模块不需结账,总账模块是否可以结账?解决方案:建议出纳结账后再结总账!用友u8erp…

Spring精华问答 | 如何集成Spring Boot?

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们一起来看看关于Spring的精华问答吧。1Q:如何在自定义端口上运行Spring Boot应用程序?A:为了在自定义端口上运行Spring…

Andrew Ng深度学习课程笔记

摘要: 本文对Andrew Ng深度学习课程进行了大体的介绍与总结,共包括21个课程。我最近在Coursera上完成了Andrew Ng导师关于新深度学习的所有课程。Ng在解释术语和概念方面做得非常出色。例如,Ng指出,监督深度学习只不过是一种多维曲…

工作流实战_05_flowable 流程定义的挂起与激活

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是…

Vue从数组中取出数据并以key-value结构存储

__ob__ : Observer {value: Array(36), shallow: false, mock: false, dep: Dep, vmCount: 0} # 我的从后端传给前端的data是这样的格式 const data [{id:"001",name:"张三",age:18},{id:"002",name:"李四",age:20},{id:"003&qu…

技嘉注入usb 3.0工具_技嘉怎么安装win10系统 技嘉安装win10系统步骤【图文介绍】...

技嘉笔记本性能配置高端,质量一流,技嘉科技在主板方面也及其出色,因此自身生产的电脑配置也相当专业。若要用技嘉 安装win10系统 要怎么做比较快呢?最简单的方法便是用u盘装系统了,u盘装系统可谓是傻瓜式一键装机,让装…

为什么深度学习没有取代传统的计算机视觉?

摘要: 深度学习大潮为什么淹没传统的计算机视觉技术?听听大牛怎么说~这篇文章是受到论坛中经常出现的问题所创作的:深度学习是否可以取代传统的计算机视觉?这明显是一个很好的问题,深度学习(DL)…

赋能网安生态通信服务器操作系统,紫光展锐打造操作系统生态,赋能万物互联智能时代...

本周,以“象由芯生科技服务人民”为主题的2020紫光展锐市场峰会重磅开启,广大生态合作伙伴共聚一堂,共话数字世界新未来。在今天举办的“操作系统OS研讨会”上,来自紫光展锐工程一线的架构师带来了一场整个操作系统领域的饕餮盛宴…

如何利用秒级监控进行mongodb故障排查

摘要: 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统的好坏,也很大程度上影响了能否精…

工作流实战_06_flowable 流程定义的删除

List item 由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,我师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:63316…

百度Q2智能云增长强劲;据悉史上最大 AI 芯片诞生!中兴与奇瑞成立合资公司一起加快开发5G汽车……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 华为推出旗下第一款可穿戴智…

python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程

笔者思虑再三还是决定选择图文(因为百家的视频发布画质真不怎么样【囧】)。 笔者学习编程的时间也挺长的,因为业余,因为时间不多,各种原因,自学编程的路特别难走。然后笔者发现,自己能为小白贡献…

从事数据科学前必须知道的五件事儿

摘要: 本文讲解了从事数据科学前应该了解的五件事情,主要是关于学习数据科学时候应该注意的一些事项。目前,人工智能行业非常火热,对应的数据科学分析岗位需求也非常大。很多程序员纷纷转行从事人工智能相关岗位,那么对…

工作流实战_07_flowable 流程定义查看流程图和xml

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,我师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都…

这项技术:华为、BAT要力捧!程序员:我彻底慌了... ​

人工智能离我们还遥远吗?海底捞斥资1.5亿打造了中国首家火锅无人餐厅;阿里酝酿了两年之久的全球首家无人酒店也正式开始运营,百度无人车彻底量产。李彦宏称,这是中国第一款能够量产的无人驾驶乘用车。而阿里的这家无人酒店&#x…

python 打开pdf文件_Python3检验pdf文件是否有效

【基本原理】 利用PyPDF2的PdfFileReader模块打开pdf文件,如果不抛异常,就认为此pdf文件有效。有时打开并不抛出异常,但是有这种警告:UserWarning: startxref on same line as offset [pdf.py:1680]。这种情况pdf多半也是坏的&…

手把手教你理解卷积神经网络

摘要: 卷积神经网络是一种识别和理解图像的神经网络。本文将从不同的层次来介绍卷积神经网络。手把手教你理解卷积神经网络(一)本文将继续为你介绍关于卷积神经网络的知识。为了保持文章的简洁性和全面性我将为你提供研究论文的链接&#xff…

工作流实战_09_flowable 流程实例挂起与激活

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,我师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都…

2018深圳云栖拉开帷幕,飞天技术汇五大专场邀你参加~

摘要: 感受万物互联的智能时代,洞察数字化转型的全新未来。云栖大会将情景化展示智能城市、智能生活、智能制造、智慧门店等阿里云IoT生态全景,20专场,覆盖AI、新零售等全行业数字化转型解决方案。 飞天技术汇作为阿里云的技术传播…