【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。
以SQL SERVER中分面页为例,按时间顺序列出定单号。
WITH OrderInfo AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number,
OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
SELECT Number,OrderID,CustomerID, EmployeeID ,OrderDate
From OrderInfo WHERE Number BETWEEN 0 AND 10
其中ROW_NUMBER()就是排名函数,OVER()就是窗口函数。
窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。
开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。
1.排名开窗函数
ROW_NUMBER、DENSE_RANK、RANK、NTILE属于排名函数。
排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。
ODER BY 指定排名开窗函数的顺序。在排名开窗函数中必须使用ORDER BY语句。
例如查询每个雇员的定单,并按时间排序
WITH OrderInfo AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate) AS Number,
OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
SELECT Number,OrderID,CustomerID, EmployeeID ,OrderDate
From OrderInfo WHERE Number BETWEEN 0 AND 10
窗口函数根据PARTITION BY语句按雇员ID对数据行分组,然后按照ORDER BY 语句排序,排名函数ROW_NUMBER()为每一组的数据分从1开始生成一个序号。
ROW_NUMBER()为每一组的行按顺序生成一个唯一的序号
RANK()也为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值会生成相同的序号,并且接下来的序号是不连序的。例如两个相同的行生成序号3,那么接下来会生成序号5。
DENSE_RANK()和RANK()类似,不同的是如果有相同的序号,那么接下来的序号不会间断。也就是说如果两个相同的行生成序号3,那么接下来生成的序号还是4。
NTILE (integer_expression) 按照指定的数目将数据进行分组,并为每一组生成一个序号。
2.聚合开窗函数
很多聚合函数都可以用作窗口函数的运算,如SUM,AVG,MAX,MIN。
聚合开窗函数只能使用PARTITION BY子句或都不带任何语句,ORDER BY不能与聚合开窗函数一同使用。
例如,查询雇员的定单总数及定单信息
WITH OrderInfo AS
(
SELECT COUNT(OrderID) OVER(PARTITION BY EmployeeID) AS TotalCount,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
SELECT OrderID,CustomerID, EmployeeID ,OrderDate,TotalCount
From OrderInfo ORDER BY EmployeeID
如果窗口函数不使用PARTITION BY 语句的话,那么就是不对数据进行分组,聚合函数计算所有的行的值。
WITH OrderInfo AS
(
SELECT COUNT(OrderID) OVER() AS Count,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)
)
转载于:https://www.cnblogs.com/gates/p/4149176.html
【转】SQL SERVER 开窗函数简介相关推荐
- Sql Server 开窗函数Over()的使用
利用over(),将统计信息计算出来,然后直接筛选结果集 1 declare @t table( 2 ProductID int, 3 ProductName varchar(20), 4 Produ ...
- SQL Server Len() 函数
SQL Server Len() 函数简介: LEN() 函数用于输入字符串的字符数. LEN() 函数返回输入字符串的字符数,不包括尾随空格. 以下是LEN() 函数的语法: LEN(input_s ...
- php charindex,SQL Server Charindex()函数
在本教程中,将学习如何使用SQL Server CHARINDEX()函数来搜索字符串中的子字符串. SQL Server CHARINDEX()函数简介 SQL Server CHARINDEX() ...
- mysql的datepart函数,SQL Server Datepart()函数
在本教程中,将学习如何使用SQL Server DATEPART()函数来提取日期的一部分. SQL Server DATEPART()函数简介 DATEPART()函数返回一个整数,它是日期的一部分 ...
- SQL Server用户自定义函数
用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函 数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过 EXECUTE 命令来执行.在 SQL Server 中根据 ...
- SQL Server CONVERT() 函数,Date 函数
From: http://www.w3school.com.cn/sql/func_convert.asp 定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() ...
- SQL Server日期函数集合
SQL Server日期函数集合--1:获取系统日期和时间值函数 --getdate() SELECT GETDATE() AS 'today' --getutcdate() SELECT GETUT ...
- sql server 自定义函数的使用
sql server 自定义函数的使用 自定义函数 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函 ...
- sql server charindex函数和patindex函数详解(转)
charindex和patindex函数常常用来在一段字符中搜索字符或字符串.假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数. ...
最新文章
- 闻声识人时代将至?多家企业争相布局
- 成功解决No handles with labels found to put in legend.
- kubernetes使用ansible快速构建集群
- flume案例-flume级联-配置文件编写
- 队列的定义与操作-顺序存储,链式存储(C语言)
- jq之$(“p:first“)
- 先学Oracle还是Java,事前学习过的java和Oracle笔记没删除的都带过来
- ERR! sharp EACCES: permission denied, mkdir ‘/root/.npm/_libvips‘......
- linux主机重启之后,报UNEXPECTED INCOMSISTEMCY:RUN fsck MANUALLY.
- Android粒子爆炸特效[可用于任意控件]
- 新版软著申请系统说明
- scala 转换、过滤、分组、排序
- 4G内存适合装哪个版本matlab,4G内存装win7 32位还是64位|单条4G内存选32位还是64位系统性能实测...
- JavaScript 每日一题 #6
- Fragstats景观分析研究
- TCP粘包/拆包问题
- Win10提示“为了对电脑进行保护,已经阻止此应用”怎么处理?
- ZOJ2477 拼魔方
- python 从大图中找小图
- kestrel服务器性能,深入理解kestrel的应用
热门文章
- native react 常用指令_React Native 常用命令或快捷键合集
- c linux time微秒_Linux基础知识(Linux系统、Linux中的链表)
- android webview 多次加载,android – 重复webview,我想在每个加载相同
- .sh是什么语言_为什么《山海经·中次二经》中,把“西王母”叫做“马腹”?...
- python命令解析_python学习(命令行的解析)
- 用vscode创建一个c项目_Visual Studio Code创建C#项目
- ubuntu下使用yocto制作龙芯文件系统
- 机器学习解决问题思路 — 词嵌入矩阵E对于NLP问题的重要性
- 高薪诚聘项目经理,架构师,高级工程师,工程师,网页设计师
- 【Django】(3)创建网页:学习笔记主页