专业编程培训机构——完成蜕变以后轻松拿高薪
电话+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)s01c0188s02c0198s03c0190s01c0289s02c0290s03c0290--建表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精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。