我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL窗口函数OVER用法实例整理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL窗口函数OVER用法实例整理

OVER的定义

OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

语法

OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] [ROWS|RANGE BETWEEN 边界规则1 and 边界规则2])

PARTITION BY 子句进行分组;

ORDER BY 子句进行排序;

ROWS|RANGE 框架是对窗口进行进一步的分区,框架有两种范围限定方式:一种是使用ROWS子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数;另一种是RANGE子句,按照排序列的当前值,根据相同值来确定分区中的行数。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;边界规则的可取值见下表

SQL窗口函数OVER用法实例整理

用法

OVER开窗函数必须聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

示例

创建测试表

create table Employee
(
    ID INT PRIMARY KEY
    ,Name VARCHAR(20)
    ,GroupName VARCHAR(20)
    ,Salary INT
) INSERT into Employee VALUES(1, '小明', '开发部', 8000), (4, '小张', '开发部', 7600), (5, '小白', '开发部', 7000), (8, '小王', '财务部', 5000), (9, null, '财务部', NULL), (15, '小刘', '财务部', 6000), (16, '小高', '行政部', 4500), (18, '小王', '行政部', 4000), (23, '小李', '行政部', 4500), (29, '小吴', '行政部', 4700)
;

SUM后的开窗函数

select  *
        ,SUM(Salary) OVER(PARTITION BY Groupname) 每个组的总工资
        ,SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID) 每个组的累计总工资
        ,SUM(Salary) OVER(ORDER BY ID) 累计工资
        ,SUM(Salary) OVER() 总工资
from    Employee

结果如下:

SQL窗口函数OVER用法实例整理

其中开窗函数的每个含义不同,我们来具体解读一下:

SUM(Salary) OVER (PARTITION BY Groupname)

只对PARTITION BY后面的列Groupname进行分组,分组后求解Salary的和。

SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)

对PARTITION BY后面的列Groupname进行分组,然后按ORDER BY 后的ID进行排序,然后在组内对Salary进行累加处理。

SUM(Salary) OVER (ORDER BY ID)

只对ORDER BY 后的ID内容进行排序,对排完序后的Salary进行累加处理。

SUM(Salary) OVER ()

对Salary进行汇总处理

排序

ROW_NUMBER()

定义:ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号

select  *
        ,ROW_NUMBER() OVER (PARTITION BY ClassName ORDER BY SCORE DESC) 班内排序
        ,ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
from    Scores
;

SQL窗口函数OVER用法实例整理

RANK()

select  ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK]
        ,*
from    Scores
;

select  RANK() OVER (ORDER BY SCORE DESC) AS [RANK]
        ,*
from    Scores
;

SQL窗口函数OVER用法实例整理

NTILE()

定义:NTILE(N)函数是将数据分成N块,然后再添加1~N的序号。

select  *
        ,NTILE(1) OVER (ORDER BY SCORE DESC) AS 分区后排序
from    Scores
;
select  *
        ,NTILE(2) OVER (ORDER BY SCORE DESC) AS 分区后排序
from    Scores
;
select  *
        ,NTILE(3) OVER (ORDER BY SCORE DESC) AS 分区后排序
from    Scores
;

SQL窗口函数OVER用法实例整理

ROWS|RANGE

select  *
        ,SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID ROWS between CURRENT ROW and 5 FOLLOWING) 从当前行开始后5行的和
from    Employee

参考

https://www.modb.pro/db/42912

总结

到此这篇关于SQL窗口函数OVER用法的文章就介绍到这了,更多相关SQL窗口函数OVER内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL窗口函数OVER用法实例整理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL窗口函数 over(partition by)的用法

MySQL窗口函数OVER(PARTITIONBY)可将数据按列分区,并对每个分区独立执行计算,如求和、平均值等。语法为:OVER(PARTITIONBYpartition_expression),其中partition_expression为分区列。使用场景包括分区数据、排序数据、指定窗口范围等。可与其他窗口函数结合使用,简化复杂查询,尤其适用于排名、聚合和分析数据。
MySQL窗口函数 over(partition by)的用法
2024-04-02

MySQL窗口函数 over(partition by)的用法

MySQL窗口函数OVER(PARTITIONBY)用于对数据分区和聚合。它允许在每个分区内计算值,常用于计算每个分区内的总和、最大值、最小值等。语法为OVER(PARTITIONBYpartition_column_list)。其优点是提供高效的分区数据聚合,提高代码简洁性,并支持多种选项如ORDERBY和RANGE。本文详细介绍了OVER(PARTITIONBY)的使用场景,包括计算部门总工资、员工排名、移动平均工资和累积总销售额等示例。
MySQL窗口函数 over(partition by)的用法
2024-04-02

MySQL窗口函数OVER()用法及说明

目录mysql窗口函数OVER()下面的讲解将基于这个employee2表MySQL窗口函数OVER()下面的讲解将基于这个employee2表mysql> SELECT * FROM employee2;+----+---------
2022-08-19

MySQL窗口函数OVER使用示例详细讲解

目录窗口函数测试数据表及数据窗口函数空窗口窗口中只有 ORDER BY窗口中只有 PARTITION BY 时同时有 PARTITION BY 与 ORDER BY窗口函数OVER (PARTITION BY xxx ORDER BY x
2023-01-05

Oracle中ROW_NUMBER()OVER()函数用法实例讲解

目录1. 说明:2. 原理:3.语法:4.示例一:5. 示例二总结oracle中ROW_NUMBER() OVER()函数用法1. 说明:ROW_NUMBER() OVER() 函数的作用:分组排序2. 原理:row_number(
2023-04-25

使用Pandas实现MySQL窗口函数的解决方法

本文主要介绍MySQL中的窗口函数row_number()、lead()/lag()、rank()/dense_rank()、first_value()、count()、sum()如何使用pandas实现,同时二者又有什么区别,感兴趣的朋友一起看看吧
2023-02-22

sql中替换函数replace()用法与实例总结

本教程全面介绍了SQL中的REPLACE()函数及其用法。REPLACE()函数用于替换字符串中的文本,语法为REPLACE(string,old_text,new_text)。函数支持替换特定单词、删除字符、多重替换和正则表达式替换。注意事项包括区分大小写、空new_text将删除旧文本以及区分Unicode字符。SUBSTRING()和CONCAT()函数可作为替代方案。
sql中替换函数replace()用法与实例总结
2024-04-02

mysql自定义函数原理与用法实例分析

本文实例讲述了mysql自定义函数原理与用法。分享给大家供大家参考,具体如下: 本文内容:什么是函数函数的创建函数的调用函数的查看函数的修改函数的删除首发日期:2018-04-18什么是函数:函数存储着一系列sql语句,调用函数就是一次性执
2022-05-26

SQLServer 错误 1204 SQL Server 数据库引擎的实例此时无法获得 LOCK 资源。 请在活动用户较少时重新运行该语句。 请询问数据库管理员,检查此实例的锁定和内存配置,或检查是否

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 1204 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 LK_OUTOF 消息正文 SQL Server ...
SQLServer 错误 1204 SQL Server 数据库引擎的实例此时无法获得 LOCK 资源。 请在活动用户较少时重新运行该语句。 请询问数据库管理员,检查此实例的锁定和内存配置,或检查是否
2023-11-05

编程热搜

目录