关键词:sql server窗口函数,窗口函数,分析函数

如果分析函数不可用,那么可能是版本还不支持

Window Function 包含了 4 个大类。分别是:

1 - Rank Function  

1.1 Rank() Over()

1.2 Row_Number() Over()

1.3 Dense_Rank() Over()

1.4 NTILE(N) Over()

2 - Aggregate Function

2.1 - Sum() Over()

2.2 - Count() Over()

2.3 - AVG() Over()

2.4 - MIN() Over()

2.5 - MAX() Over()

3 - Offset Function

3.1 Lead()

3.2 LAG()

3.3 First_Value()

3.4 Last_Value()

3.5 Nth_Value()

4 - Distribution Function.

4.1- PERCENT_RANK()

4.2 - CUME_DIST()

4.3 - PERCENT_COUNT()

4.4 - PERCENT_DISC()

1 - Rank Function 估计是平常用到最多的一类 window Function.

1.1 Rank() Over()

1.2 Row_Number() Over()

1.3 Dense_Rank() Over()

1.4 NTILE(N) Over()

使用:四大排名函数

注意点

这四个函数,要注意的地方有两点:

a. Rank() Over() 与 Row_Number() Over() :

  两者唯一的区别,就在于Row_Number() Over() 真正实现了相同条件的两条或者多条记录是用唯一值来区别的

b. Rank() Over() 与 Dense_Rank() Over() :

  这两者的区别,在于他们对位于相同排名之后的名次,是接着相同排名的连续数(Rank) 还是相隔 N 个相同记录个数之后的连续数(Dense_Rank)。

所以 Rank 出来的结果都是连续数字,而 Dense_Rank 出来的结果有可能有跳格数。

例子(更多参考四大排名函数

第一种,我们平常用 Row_Number() 加 Top (N) 来实现 :

SELECT
TOP (100) *
FROM
(
SELECT
OrderId,
OrderMonth,
OrderAmount,
Row_Number () OVER (OrderBy OrderAmount DESC) AS Amt_Order
FROM
FctSales
) tmp
WHERE
Amt_Order BETWEEN 2000
AND 3000

2 - Aggregate Function. 用于聚合数据

2.1 - Sum() Over()

2.2 - Count() Over()

2.3 - AVG() Over()

2.4 - MIN() Over()

2.5 - MAX() Over()

在使用 Aggregation 函数的时候,唯一要注意的地方就是 Order 子句。

function_name(<arguments>) Over(
[ <window partition clause>]
[ <window Order clause>
[ <window frame clause>]
])
Over::
Over(
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
[ <ROW or RANGE clause> ]
) <window frame clause>::窗口中的窗口
ROWS | RANGE
BETWEEN
UNBOUNDED PRECDEDING |
<N> PRECEDING |
<N> FOLLOWING |
CURRENT ROW
AND
UNBOUNDED FOLLOWING |
<N> PRECEDING |
<N> FOLLOWING | CURRENT ROW 举一个例子:
--利用嵌套统计累加和
;with temp1 as (
select 1 as id ,1 as num union all
select 1 as id ,2 as num union all
select 1 as id ,3 as num union all
select 2 as id ,4 as num union all
select 2 as id ,5 as num union all
select 2 as id ,6 as num
)
select *,sum(num) over(partition by id order by num asc rows between unbounded preceding and current row) from temp1


3 - Offset Function:定位记录

3.1 Lead() --自上而下(lead lag 参考:https://blog.csdn.net/leewhoee/article/details/20264653/

3.2 LAG() --自下而上

3.3 First_Value() --第一个值

3.4 Last_Value() --最后一个值

3.5 Nth_Value() --第N个值

这一类比较好理解,根据当前的记录,获取前后 N 条数据。

举例:

  LEAD ( scalar_expression [ ,offset ] , [ default ] )     OVER ( [ partition_by_clause ] order_by_clause )

  LEAD(score,1,0) over(order by score) as next_score

  根据score排序,第1行之后开始的1行(即第2行的score列值),default对应的是,如果是末行或者值为null,则给个默认值

  

4 - Distribution Function: 分布函数

4.1- PERCENT_RANK()

4.2 - CUME_DIST()

4.3 - PERCENT_COUNT()

4.4 - PERCENT_DISC()

参考自:https://www.jianshu.com/p/bfc39dcb73f9
参考文献:https://www.cnblogs.com/CareySon/p/3411176.html

(4.34)sql server窗口函数的更多相关文章

  1. 总结SQL Server窗口函数的简单使用

    总结SQL Server窗口函数的简单使用 前言:我一直十分喜欢使用SQL Server2005/2008的窗口函数,排名函数ROW_NUMBER()尤甚.今天晚上我在查看SQL Server开发的相 ...

  2. SQL Server窗口函数:ROWS与RANGE

    几乎每次我展示SQL Server里的窗口时,人们都非常有兴趣知道,当你定义你的窗口(指定的一组行)时,ROWS与RANGE选项之间的区别.因此在今天的文章里我想给你展示下这些选项的区别,对于你的分析 ...

  3. SQL Server 窗口函数详解:OVER()

    语法 开窗函数支持分区.排序和框架三种元素,其语法格式如下: OVER ( [ <PARTITION BY clause> ] [ <ORDER BY clause> ] [ ...

  4. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  5. SQL Server 数据库部分常用语句小结(三)

    21.SQL运行Log的读取 .EXEC xp_readerrorlog 0,1,null,null,'开始时间','结束时间' 22. Alwayson 状况及传输情况监控 SELECT ar.re ...

  6. 【转载】SQL Server 版本列表

    Quick summary:     RTM (no SP) SP1 SP2 SP3 SP4  SQL Server 2017     codename vNext not yet released  ...

  7. 获取SQL Server的版本信息

    微软 SQL Server 版本号 产品名称 发行日期 主版本号 正式版 SP1 SP2 SP3 SP4 SQL Server 2016 2016.06.01 13.00.1601.5 13.00.1 ...

  8. Microsoft SQL Server Version List [sqlserver 7.0-------sql server 2016]

    http://sqlserverbuilds.blogspot.jp/   What version of SQL Server do I have? This unofficial build ch ...

  9. SQL Server中的窗口函数

    简介     SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函 ...

随机推荐

  1. [采坑] VS2015 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    问题: Visual Studio 2015出现warning C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失. 解决方案: 1. ...

  2. 多版本python的pip 升级后, pip2 pip3 与python版本失配

    mint19.2   本来pip 和 pip2 对应 python2.7   pip3对应python3.6 用源码安装了python3.7之后. 这样 版本也没问题. 但是,  用pip3.7 安装 ...

  3. A. Be Positive

    A. Be Positive time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  4. 互联网_http协议

    一.定义 http协议叫做超文本传输协议,是从web服务器传输超文本到本地浏览器的协议. 二.特征 1.无连接:即每次连接仅处理一个请求,服务器处理完客户的请求,并收到客户端的响应后,即断开连接.采用 ...

  5. linux监控系统性能命令

    Linux系统性能10条命令监控 https://www.cnblogs.com/qmfsun/p/5729442.html 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. ...

  6. 通过JVM日志来进行安全点分析

    许多事件都可能会导致JVM暂停所有的应用线程.这类暂停又被称为”stop-the-world”(STW)暂停.触发STW暂停最常见的原因就是垃圾回收了(github中的一个例子),但不同的JIT活动( ...

  7. Java密码处理

  8. numpy小记

    import numpy as np # a=np.array([[1,3,2],[4,5,6]]) print(a) a=np.arange(1,13).reshape((3,4))#生成一个3行4 ...

  9. npm安装 syscall access

    npm WARN deprecated bower@1.8.4: We don't recommend using Bower for new projects. Please consider Ya ...

  10. DAY 4模拟赛

    DAY 4 zhx出题 T1 裂变链接 [问题描述] 你是能看到第一题的 friends 呢. ——hja 众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这个题和组合数没什么关系. 现在有