一、窗口函数的作用


窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列。窗口函数,基础列和聚合列的查询都非常简单。

二、语法格式


窗口函数的语法格式如下:

OVER([PARTITION BY value_expression,..[n] ] <ORDER BY BY_Clause>)
  • PARTITION:分组;
  • ORDER BY:排序;
首先建一张调试表如下:
CREATE TABLE [dbo].[xxx](
  [Id] [int] NULL,
  [Name] [nvarchar](50) NULL,
  [Operate] [nvarchar](50) NULL,
  [Score] [int] NULL,
  [CreateTime] [datetime] NULL
) ON [PRIMARY]

往里面添加如下数据。

三、应用场景


1、聚合列与数据列共同显示

 --查询姓名、分数、以及全体平均分
 SELECT Name, Score, CAST(AVG(Score) OVER() AS decimal(5,2) )AS '平均分' FROM xxx

2、分组日期最新

--对每个人查询日期最新列
SELECT * FROM
(
SELECT row_number() OVER(PARTITION BY Name ORDER BY CreateTime) AS part ,Score, Name, CreateTime FROM xxx
) AS C
WHERE C.part = 1

3、分页

返回结果集内的行号,每个分区从1开始,ORDER BY可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

四、排名函数


1、ROW_NUMBER()

返回结果集内的行号,每个分区从1开始计算,ORDER BY可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

    SELECT row_number() OVER(PARTITION BY Name ORDER BY CreateTime) ,Score, Name, CreateTime
FROM xxx

输出如下:

2、RANK()

返回结果集的分区内每行的排序。行的排名是从1开始算。如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。

  SELECT RANK() OVER(PARTITION BY Name ORDER BY SCORE) ,Score, Name, CreateTime
  FROM xxx

下面一张图片很好地说明了Rank与ROW_NUMBER的区别。

3、DENSE_RANK()

返回结果集分区中行的排名,与Rank()类似,只是对并列的处理稍有不同,详见示例。

SELECT DENSE_RANK() OVER(PARTITION BY Name ORDER BY SCORE) ,Score, Name, CreateTime
FROM xxx

下面的示例展示了Rank()与Dense_Rank()的区别。主要区别就是Rank返回的排名数字可能是非连续的,因为同样大小的排名数字会占位,而Dense_Rank返回的排名数字一定是连续的,因为同样大小的排名数字不会占位。

Rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次
Dense_Rank:排名相同的名次一样,且后面名次不跳跃

4、NTILE()

NTILE函数把结果中的行关联到组,并为每一行分配一个所属的组的编号,编号从1开始。对于每一个行,NTILE 将返回此行所属的组的编号。

如果分区的行数不能被 integer_expression(就是传入的那个参数,表示分几个组的意思) 整除,则将导致一个成员有两种大小不同的组。按照 OVER 子句指定的顺序,较大的组排在较小的组前面。

--每个分区分2个组,该列是改行所属的组名
SELECT NTILE(2) OVER(PARTITION BY Name ORDER BY SCORE) ,Score, Name, CreateTime
FROM xxx

示例如下:

原文链接

SQLServer 窗口函数(转载)的更多相关文章

  1. SQLServer 窗口函数

    一.窗口函数的作用 窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列.窗口函数,基础列和聚合列的查询都非常简单. 二.语法格式 窗 ...

  2. 如何把高版本的sqlserver 还原到低版本的 sqlserver(转载)

    本例为sql2012 还原到sql2008. 要实现的功能是把sql2012的数据库备份到sql2008,数据库名字为Test,并且这两个数据库在不同的电脑中. 微软的软件设计方案基本上都是新版本兼容 ...

  3. 「数据分析」Sqlserver中的窗口函数的精彩应用-问题篇

    最近看到PowerBI圈子在讨论最大连续区间段的问题,即某人最大的全勤时间,某人的最长的连续打卡时间等问题的计算,佐罗老师给出了10万倍性能的答案.这个问题也引发了笔者一些兴趣,隐约记得以前看过Sql ...

  4. 个人永久性免费-Excel催化剂功能第37波-把Sqlserver的强大分析函数拿到Excel中用

    本人一直钟情于使用Sqlserver数据库的一大原因是其提供了非常好用.高效的数据分析函数(窗口函数),可以在做数据清洗和数据分析场合等多个场景使用.只需简单的一个函数即可做出常规SQL语句很难以实现 ...

  5. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  6. SQLServer内核架构剖析 (转载)

    SQL Server内核架构剖析 (转载) 这篇文章在我电脑里好长时间了,今天不小心给翻出来了,觉得写得很不错,因此贴出来共享. 不得不承认的是,一个优秀的软件是一步一步脚踏实地积累起来的,众多优秀的 ...

  7. 转载——SqlServer之like、charindex、patindex

    转载自:http://www.2cto.com/database/201305/214967.html SqlServer之like.charindex.patindex   1.环境介绍 测试环境 ...

  8. 【转载】 Sqlserver中查看自定义函数被哪些对象引用

    Sqlserver数据库中支持自定义函数,包含表值函数和标量值函数,表值函数一般返回多个数据行即数据集,而标量值函数一般返回一个值,在数据库的存储过程中可调用自定义函数,也可在该自定义函数中调用另一个 ...

  9. 【转载】Sqlserver数据库备份的几种方式

    在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...

随机推荐

  1. 【读书笔记】iOS-流式音频与Pandora Radio之路

    复杂性是不可避免的,而且只会随时间增长,所以在增加特性时一定要为重构和代码简化留出时间.真正遇到问题这前先不要担心性能.iPhone非常强壮,你可能永远也不会遇到预想的性能问题. 能过互联网向一个设备 ...

  2. 获取url参数的方法(web)

    //获取url参数的方法(web) function GetQueryString(name) {     var reg = new RegExp("(^|&)" + n ...

  3. [VUE ERROR] Invalid default value for prop "slides": Props with type Object/Array must use a factory function to return the default value

    错误原因: 当给子组件设置 props 属性时,如果参数类型是 Array 或 Object ,它的默认值必须是由工场函数返回,不能直接赋值 错误代码: proE: { type: Array, de ...

  4. Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本

    管理中心 ->升级和迁移 ->查看数据库状态 解决方法: 开始-运行(以管理员身份运行),输入如下命令. cd  C:\Program Files\Common Files\Microso ...

  5. Salesforce小知识:累计汇总字段类型

    累计汇总字段类型的定义 Salesforce中可以在两个对象之间建立关系.一个对象的某一条记录可以有若干条相关联的其他对象记录. 累计汇总字段可以将这些相关联的记录中的某些字段值汇总起来,显示给用户. ...

  6. C# 插件式开发

    在网上找了下插件式编程的资料,这里自己先借鉴下别人的,同时发现有自己的看法,不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看到我的不足,给我提出宝 ...

  7. ASP.NET MVC从请求到响应发生了什么

    *过程描述 当浏览器发出一个http请求后,该请求被UrlRoutingModule截获,UrlRoutingModule根据请求上下文去系统路由表(RouteTable)中匹配,从中获取一个Rout ...

  8. webAPi OData的使用

    一.OData介绍 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准. 二.OData 在asp.net mvc中的用法 ...

  9. github拓展,以及ModelForm的使用

    github - git  init/add/commit/reset/log/status/stash pop/checkout/branch    新入职到公司,地址:   git clone h ...

  10. css理论

    1css语法 2css的四种引入方式 3css选择器 4css四种属性操作 5float属性操作 6盒子模型 1 css语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. '' se ...