关键词: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. Mybaist 注解 foreach 嵌套循环实现批量插入

    第一种写法(#使用占位符推荐): @Insert("<script>" + " insert into ${tb} " +" <fo ...

  2. Vue学习搭建(基础)

    空项目:https://github.com/ElementUI/element-starter.git 参考教程:https://blog.csdn.net/xuehu837769474/artic ...

  3. 关于Environment类的使用

    import org.springframework.core.env.Environment; EnvironmentAware 如何引用这个类1.可以通过 @Autowired织入Environm ...

  4. head first 设计模式笔记5-单例模式

    目录: 1.单例模式(Singleton Pattern) 2.概念 3.饿汉式:不是延迟加载,加载类的时候直接初始化 4.懒汉式:延迟加载,首次需要使用的时候在实例化,需要考虑线程安全 5.静态内部 ...

  5. 关于session、cookie、sessionStorage、localStorage的简要理解

    一.cookie和session 首先session和cookie用于浏览器客户端与服务端进行数据交互,通过会话的方式跟踪浏览器用户身份 (1) cookie 1.1) 一般由服务器生成,可以设置失效 ...

  6. K8S容器探针

    容器探针 探针是由 kubelet对容器执行的定期诊断.要执行诊断, kubelet 调用由容器实现的    Handler .有三种类型的处理程序:   ExecAction :在容器内执行指定命令 ...

  7. 【Python】PIL模块

    Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...

  8. C++读入神器——文操快读(oj也可以用)

    当某天,本蒟蒻沉迷于卡常的时候: 我-- 突然,YYKdalao说:用文操快读啊! 然后 喔-目瞪口呆 不多说,上源码: 本来用的读入方式: inline void Read( int &x ...

  9. Nginx配置记录【例2】

    B服务器,例: [root@localhost conf.d]# egrep -v "^#|^$" /etc/nginx/nginx.conf user nginx; worker ...

  10. 关于Java 8 forEach

    1. forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.p ...