当前位置: 首页 新闻详细

SQL函数-窗口函数-聚合窗口函数——SQL窗口函数

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V:159999-78052 ,欢迎咨询sql查询数据库窗口函数,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、SQL函数-窗口函数-聚合窗口函数

常见的聚合函数如AVG(),SUM(),COUNT(),MAX()以及MIN()等,均可作为窗口函数使用。

一、移动聚合

1.移动平均值

AVG函数作为窗口函数,可用于计算移动窗口内数据行的平均值。

例如,计算不同产品每个月以及截至当前月最近3个月的平均销售额,需使用AVG函数OVER子句中的PARTITIONBY选项进行产品分区,ORDERBY选项进行月份排序,ROWSBETWEEN2PRECEDINGANDCURRENTROW定义窗口范围。

2.移动求和

移动窗口内除了求平均值外,还可进行移动求和。

例如,计算不同产品每个月以及截至当前月最近3个月的累计销售额,需使用SUM函数OVER子句中的PARTITIONBY选项进行产品分区,ORDERBY选项进行月份排序,ROWSBETWEEN2PRECEDINGANDCURRENTROW定义窗口范围。

二、累计聚合

1.累计求和

SUM函数作为窗口函数,可统计指定窗口内的累计值。

例如,计算不同产品截至当前月份的累计销售额,需使用SUM函数OVER子句中的PARTITIONBY选项进行产品分区,ORDERBY选项进行月份排序,ROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW定义窗口范围。

2.累计平均值

例如,计算不同产品截至当前月份的平均销售额,需使用AVG函数OVER子句中的PARTITIONBY选项进行产品分区,ORDERBY选项进行月份排序,ROWSBETWEENUNBOUNDEDPRECEDINGANDCURRENTROW定义窗口范围。

三、ORDERBY的默认设置

聚合窗口函数默认的窗口大小取决于是否指定ORDERBY选项。

1.指定ORDERBY选项

当指定ORDERBY选项后,窗口大小为分区的第一行到当前行。

2.不指定ORDERBY选项

不指定ORDERBY选项时,查询的窗口大小为整个分区。

四、RANGE指定窗口

使用RANGE关键字以数值为单位指定窗口的偏移量。

例如,查询短期之内(5天)累计转账超过100万元的账户。

举例使用数据:

1.sales_monthly表:存储不同产品每个月的销售额情况。

二、第6关:SQL高级功能(窗口函数)

第6关:深入理解SQL高级功能——窗口函数

窗口函数在SQL中扮演着关键角色,它能够解决那些常规查询无法处理的业务场景。窗口函数就像一个分析“窗口”,对数据库数据进行实时分析和处理,尤其在需要对分组后的数据进行排序或排名时显得尤为重要。

窗口函数的基本结构是OVER(),其中包含三个子句,用于定义窗口范围。如果没有明确的范围,窗口将包括所有满足WHERE条件的行。窗口函数通常用在SELECT语句中,它们可以是专用窗口函数(如rank、dense_rank和row_number)或聚合函数(如sum、avg、count等)。

窗口函数的一个重要特性是“窗口”,它模拟了分组后对数据的处理。例如,rank()函数会为每个分组内的行分配一个序号,而dense_rank()不会跳过并列值。NTH_VALUE()函数则可以找到窗口内指定位置的值,如找出每个部门薪水的第二高点。

窗口函数的应用广泛,包括排名问题、topN问题,以及使用聚合函数进行累计求和、移动平均等。例如,计算每月的累计支付总额,或者查找特定时间段的移动平均支付金额。理解窗口函数的原理和用法,能极大提升SQL查询的灵活性和效率。

SQL窗口函数

原创2022-06-0622:06·数据笔记背景在数据分析中,经常会遇到按某某条件来排名、并找出排名的前几名,用日常SQL的GROUPBY,ORDERBY来实现特别的麻烦,有时甚至实现不了,这个时候SQL窗口函数就能发挥巨大作用了,窗口函数可以轻松解决下面的问题:1)排名问题:如按课程的学习成绩来排名2)topN问题:如找出每门课程成绩的前N名什么是窗口函数窗口函数,也叫OLAP函数(OnlineAnallyticalProcessing,联机分析处理),可以对数据库数据进行实时分析处理;这些处理通常很难通过聚合函数和分组操作来实现。窗口函数定义语法格式:<窗口函数>over(partitionby<用于分组的列名>orderby<用于排序的列名>)窗口函数的功能:1)同时具有分组和排序的功能2)不减少原有的行数3)窗口表示范围窗口函数分类1)专用窗口函数:rank():计算排名,存在并列排名,并列占位置dense_rank():计算排名,存在并列排名,并列不占位置row_number():计算排名,不存在并列2)聚合函数:sum():求和avg():求平均值count():计算总记录数max():求最大值min():求最小值演示学生成绩表t_stu_score:

学号

(sid)

课程编号

(cid)

成绩

(score)

s01

c01

88

s02

c01

98

s03

c01

90

s01

c02

89

s02

c02

90

s03

c02

90

--建表createtablet_stu_score(sidvarchar(10),cidvarchar(10),scoreint)--添加测试数据insertintot_stu_scorevalues('s01','c01',88);insertintot_stu_scorevalues('s02','c01',98);insertintot_stu_scorevalues('s03','c01',90);insertintot_stu_scorevalues('s01','c02',89);insertintot_stu_scorevalues('s02','c02',90);insertintot_stu_scorevalues('s03','c02',90);1.按课程的学习成绩来排名查询

select*,rank()over(partitionbycidorderbyscoredesc)asranking,dense_rank()over(partitionbycidorderbyscoredesc)asdense_ranking,row_number()over(partitionbycidorderbyscoredesc)asrow_num,avg(score)over(partitionbycid)asavg_score,max(score)over(partitionbycid)asmax_score,min(score)over(partitionbycid)asmin_scorefromt_stu_score结果:

2.找出每门课程成绩的前两名

select*from(select*,rank()over(partitionbycidorderbyscoredesc)asranking,dense_rank()over(partitionbycidorderbyscoredesc)asdense_ranking,row_number()over(partitionbycidorderbyscoredesc)asrow_num,avg(score)over(partitionbycid)asavg_score,max(score)over(partitionbycid)asmax_score,min(score)over(partitionbycid)asmin_scorefromt_stu_score)awherea.ranking<=2结果:


【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

电话+V:159999-78052

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

sql查询数据库窗口函数
发布人:zogfh85074427 发布时间:2024-09-04