-- 开窗函数:在结果集的基础上进一步处理(聚合操作)

SELECT * FROM dbo.Student

S#         Sname      Sage                    Ssex
---------- ---------- ----------------------- ----------
01 赵雷 1990-01-01 00:00:00.000
02 钱电 1990-12-21 00:00:00.000
03 孙风 1990-05-20 00:00:00.000
04 李云 1990-08-06 00:00:00.000
05 周梅 1991-12-01 00:00:00.000
06 吴兰 1992-03-01 00:00:00.000
07 郑竹 1989-07-01 00:00:00.000
08 王菊 1990-01-20 00:00:00.000 女 -- Over函数,添加一个字段显示最大年龄
SELECT *,MAX(DATEDIFF(yyyy,Sage,GETDATE()))OVER() MaxSage FROM dbo.Student S# Sname Sage Ssex MaxSage
---------- ---------- ----------------------- ---------- -----------
01 赵雷 1990-01-01 00:00:00.00028
02 钱电 1990-12-21 00:00:00.00028
03 孙风 1990-05-20 00:00:00.00028
04 李云 1990-08-06 00:00:00.00028
05 周梅 1991-12-01 00:00:00.00028
06 吴兰 1992-03-01 00:00:00.00028
07 郑竹 1989-07-01 00:00:00.00028
08 王菊 1990-01-20 00:00:00.00028 -- Over函数,添加一个字段显示总人数
SELECT *,COUNT(S#)OVER() 总人数 FROM dbo.Student S# Sname Sage Ssex 总人数
---------- ---------- ----------------------- ---------- -----------
01 赵雷 1990-01-01 00:00:00.0008
02 钱电 1990-12-21 00:00:00.0008
03 孙风 1990-05-20 00:00:00.0008
04 李云 1990-08-06 00:00:00.0008
05 周梅 1991-12-01 00:00:00.0008
06 吴兰 1992-03-01 00:00:00.0008
07 郑竹 1989-07-01 00:00:00.0008
08 王菊 1990-01-20 00:00:00.0008 -- Partition By 分组统计数量
-- 根据性别分组后,统计
SELECT *,COUNT(*) OVER(PARTITION BY Ssex) 总数 FROM dbo.Student S# Sname Sage Ssex 总数
---------- ---------- ----------------------- ---------- -----------
01 赵雷 1990-01-01 00:00:00.0004
02 钱电 1990-12-21 00:00:00.0004
03 孙风 1990-05-20 00:00:00.0004
04 李云 1990-08-06 00:00:00.0004
05 周梅 1991-12-01 00:00:00.0004
06 吴兰 1992-03-01 00:00:00.0004
07 郑竹 1989-07-01 00:00:00.0004
08 王菊 1990-01-20 00:00:00.0004 -- 根据性别分组后,统计、排序
SELECT *,COUNT(*) OVER(PARTITION BY Ssex ORDER BY Sname) 序号 FROM dbo.Student S# Sname Sage Ssex 序号
---------- ---------- ----------------------- ---------- -----------
04 李云 1990-08-06 00:00:00.0001
02 钱电 1990-12-21 00:00:00.0002
03 孙风 1990-05-20 00:00:00.0003
01 赵雷 1990-01-01 00:00:00.0004
08 王菊 1990-01-20 00:00:00.0001
06 吴兰 1992-03-01 00:00:00.0002
07 郑竹 1989-07-01 00:00:00.0003
05 周梅 1991-12-01 00:00:00.0004 -- Over函数,添加一个字段显示平均年龄
SELECT *,AVG(DATEDIFF(yyyy,Sage,GETDATE()))OVER() 平均年龄 FROM dbo.Student S# Sname Sage Ssex 平均年龄
---------- ---------- ----------------------- ---------- -----------
01 赵雷 1990-01-01 00:00:00.00026
02 钱电 1990-12-21 00:00:00.00026
03 孙风 1990-05-20 00:00:00.00026
04 李云 1990-08-06 00:00:00.00026
05 周梅 1991-12-01 00:00:00.00026
06 吴兰 1992-03-01 00:00:00.00026
07 郑竹 1989-07-01 00:00:00.00026
08 王菊 1990-01-20 00:00:00.00026 --Row_Rumber()
SELECT *,ROW_NUMBER()OVER(ORDER BY S# DESC) 序号 FROM dbo.Student S# Sname Sage Ssex 序号
---------- ---------- ----------------------- ---------- --------------------
08 王菊 1990-01-20 00:00:00.0001
07 郑竹 1989-07-01 00:00:00.0002
06 吴兰 1992-03-01 00:00:00.0003
05 周梅 1991-12-01 00:00:00.0004
04 李云 1990-08-06 00:00:00.0005
03 孙风 1990-05-20 00:00:00.0006
02 钱电 1990-12-21 00:00:00.0007
01 赵雷 1990-01-01 00:00:00.0008 --Row_Rumber() 实现分页效果
WITH T AS (
SELECT ROW_NUMBER() OVER ( ORDER BY S# DESC ) RowNumber ,*
FROM dbo.Student
)
SELECT * FROM T WHERE T.RowNumber BETWEEN 1 AND 3 RowNumber S# Sname Sage Ssex
-------------------- ---------- ---------- ----------------------- ----------
1 08 王菊 1990-01-20 00:00:00.000
2 07 郑竹 1989-07-01 00:00:00.000
3 06 吴兰 1992-03-01 00:00:00.000 女 --Rank() 排名函数,名次相同,跳过
SELECT *,RANK()OVER(ORDER BY Ssex) 名次 FROM dbo.Student
S# Sname Sage Ssex 名次
---------- ---------- ----------------------- ---------- --------------------
01 赵雷 1990-01-01 00:00:00.0001
02 钱电 1990-12-21 00:00:00.0001
03 孙风 1990-05-20 00:00:00.0001
04 李云 1990-08-06 00:00:00.0001
05 周梅 1991-12-01 00:00:00.0005
06 吴兰 1992-03-01 00:00:00.0005
07 郑竹 1989-07-01 00:00:00.0005
08 王菊 1990-01-20 00:00:00.0005 --DENSE_Rank() 排名函数,名次相同不跳过
SELECT *,DENSE_RANK()OVER(ORDER BY Ssex) 名次 FROM dbo.Student S# Sname Sage Ssex 名次
---------- ---------- ----------------------- ---------- --------------------
01 赵雷 1990-01-01 00:00:00.0001
02 钱电 1990-12-21 00:00:00.0001
03 孙风 1990-05-20 00:00:00.0001
04 李云 1990-08-06 00:00:00.0001
05 周梅 1991-12-01 00:00:00.0002
06 吴兰 1992-03-01 00:00:00.0002
07 郑竹 1989-07-01 00:00:00.0002
08 王菊 1990-01-20 00:00:00.0002 -- NTILE()函数,参数:记录总数/划分区域 = 每个区域数组,把记录序号放进数组 (平均分组)
SELECT *,NTILE(3)OVER(ORDER BY Ssex) 区域 FROM dbo.Student S# Sname Sage Ssex 区域
---------- ---------- ----------------------- ---------- --------------------
01 赵雷 1990-01-01 00:00:00.0001
02 钱电 1990-12-21 00:00:00.0001
03 孙风 1990-05-20 00:00:00.0001
04 李云 1990-08-06 00:00:00.0002
05 周梅 1991-12-01 00:00:00.0002
06 吴兰 1992-03-01 00:00:00.0002
07 郑竹 1989-07-01 00:00:00.0003
08 王菊 1990-01-20 00:00:00.0003

SQL Server - 开窗函数的更多相关文章

  1. SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数

    https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...

  2. 【转】SQL SERVER 开窗函数简介

    在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...

  3. SQL SERVER开窗函数

    作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了<程序员的SQL金典>这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也 ...

  4. Sql server 开窗函数over()的语法

    用法一:与ROW_NUMBER()函数结合用,给结果进行排序编号,如图: 代码如下: SELECT ROW_NUMBER() over(order by RequiredDate) num ,* fr ...

  5. Sql Server 开窗函数Over()的使用

    利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName ), ProductType ), Price in ...

  6. SQL Server开窗函数之OVER子句、PARTITION BY 子句

    开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同 ...

  7. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  8. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...

  9. 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数

    SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...

随机推荐

  1. [Oracle]查看数据是否被移入 DataBuffer 的方法

    查看数据是否被移入 DataBuffer 的方法: 例如:表名为 tabxxx, 用户为U2: SQL> grant dba to u2 identified by u2;SQL> con ...

  2. MFC CTreeCtrl控件

    知识点: 认识CTreeCtrl CTreeCtrl控件属性 CTreeCtrl添加根项 CTreeCtrl添加子项 一.CTreeCtrl控件属性 先设置CTreeCtrl的属性: Has Line ...

  3. 学会查看Linux手册页(man文档)

    区段1:用户指令区段2:系统调用区段3:程序库调用区段4:设备区段5:文件格式区段6:游戏区段7:杂项区段8:系统指令区段9:内核内部指令区段n:Tcl或Tk指令 如果记不清楚工具或者函数的完整名字, ...

  4. stl源码剖析 详细学习笔记stack queue

    // //  stack.cpp //  笔记 // //  Created by fam on 15/3/15. // // //---------------------------15/03/1 ...

  5. NAND Flash底层原理,SLC MLC TLC比较

    NAND-Flash 的存储原理 固态硬盘最小单元的基本架构如下: 我们知道计算机中所有的信息储存最终都必须回归到 0与1,原则上,只要存储单元能提供两种或两种以上可供辨识的状态,便可以拿来纪录数据. ...

  6. 「功能笔记」Spacemacs+Evil备忘录

    设置代理 (setq url-gateway-method 'socks) (setq socks-server '("Default server" "127.0.0. ...

  7. React笔记-首次渲染

    渲染机制 渲染机制主要分为两部分: 首次渲染和更新渲染. 首次渲染 首先通过一个小例子,来讲解首次渲染过程. <!DOCTYPE html> <html lang="en& ...

  8. Day Four

    站立式会议 站立式会议内容总结 442 今天:整合主页两个部分的逻辑代码,主页及其跳转基本完成 遇到的问题:无 明天:阅读图书界面逻辑部分完成 331 今天:学习java反射添加类数据到数据库 遇到问 ...

  9. XP局域网访问无权限、不能互相访问问题的完整解决方案

    XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...

  10. 服务端增加WCF服务全局异常处理机制

    服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...