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

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. [CF587F]Duff is Mad[AC自动机+根号分治+分块]

    题意 给你 \(n\) 个串 \(s_{1\cdots n}\) ,每次询问给出 \(l,r,k\) ,问在 \(s_{l\cdots r}\) 中出现了多少次 \(s_k\) . \(n,q,\su ...

  2. Outlook2013修改数据文件默认存放目录

    转载 当使用outlook 2013新建Email账户的时候,其数据文件(.ost文件)总是被保存在C盘默认目录“C:\Users\用户名\AppData\Local\Microsoft\Outloo ...

  3. photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法

    1.关闭防火墙和杀毒软件 2.删除注册表 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager目录,找到其中的 ...

  4. LintCode——交叉字符串

    描述:给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例:s1 = "aabcc" s2 = "dbbca" - 当 s3 = &quo ...

  5. 用 C 语言描述几种排序算法

    排序算法是最基本且重要的一类算法,本文基于 VS2017,使用 C 语言来实现一些基本的排序算法. 一.选择排序 选择排序,先找到数组中最小的元素,然后将这个元素与数组的第一个元素位置互换(如果第一个 ...

  6. 如何解决python连接数据库编码问题(python传数据到mysql乱码)'ascii' codec can't encode _mysql_exceptions.OperationalError: (1366, "Incorrect string value:?

    首先描述下问题:  在使用python计算出结果后将结果插入到mysql过程中,报如下错误.原因很好定位就是编码的问题.那么到底是编码哪里出了问题了呢? 报错如上: 排查顺序: 第一:python的编 ...

  7. JSP JSTL知识结构图

    自行绘制,欢迎指正.

  8. linux 内核 第四周 扒开系统调用的三层皮 上

    姬梦馨 原创作品 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来:库函数帮我们把系 ...

  9. Spherical Hashing,球哈希

    1. Introduction 在传统的LSH.SSH.PCA-ITQ等哈希算法中,本质都是利用超平面对数据点进行划分,但是在D维空间中,至少需要D+1个超平面才能形成一个封闭.紧凑的区域.而球哈希方 ...

  10. 一篇关于spring ioc 依赖注入3种方式的文章引用

    今天看到一篇spring ioc 容器依赖注入3种方式的文章,为了方便后面的复习,在此引用别人的文章,查看请戳我.