美文网首页
SQL Server 窗口函数

SQL Server 窗口函数

作者: Liam_ml | 来源:发表于2019-01-08 19:52 被阅读15次

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

1 - Rank Function

2 - Aggregate Function

3 - Offset Function

4 - Distribution Function.

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



举一个例子:



select custid

, ordermonth

, ordervolume

, sum(ordervolume)

over( partition by custid

order by ordermonth asc

rows between

unbounded preceding

and current row)

as cumulatedVolume

from FctSales

统计了截止到目前为止,每一天的累计总量。

3 - Offset Function:定位记录

3.1 Lead()

3.2 LAG()

3.3 First_Value()

3.4 Last_Value()

3.5 Nth_Value()

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

4 - Distribution Function: 分布函数

4.1- PERCENT_RANK()

4.2 - CUME_DIST()

4.3 - PERCENT_COUNT()

4.4 - PERCENT_DISC()

米霖微信.PNG

添加我的微信吧

相关文章

  • SQL Server 窗口函数

    Window Function 包含了 4 个大类。分别是: 1 - Rank Function 2 - Aggr...

  • hive窗口函数盘点

    在支持窗口函数里的sql里,善用窗口函数,能降低sql编写复杂度并提高sql执行效率。 窗口函数 function...

  • SQL查询物料最新采购价格示例(窗口函数应用)

    本示例基于SQL Server数据库,通过 窗口函数(window function),对数据进行多字段排序,并获...

  • SQL Server DATEADD() 函数

    SQL Server DATEADD() 函数 标签(空格分隔): SQL SQLServer SQL Serve...

  • Hive SQL 窗口函数

    本文首发:大数据每日哔哔-Hive SQL 窗口函数 Hive 的窗口函数 在 SQL 中有一类函数叫做聚合函数,...

  • 窗口函数(OVER 子句)

    窗口函数简介 数据准备 问题描述 解答 窗口函数简介 窗口函数是 SQL 中一类特别的函数。 和聚合函数相似,窗口...

  • 一些MySQL的数值函数干货

    早在 2021 年 5 月,我们就探讨了 SQL Server 的重要的 SQL Server 函数[https:...

  • Mysql窗口函数

    参考: MySQL 8.0窗口函数:用非常规思维简易实现SQL需求 数分面试-SQL篇 一、mysql窗口函数简介...

  • MySQL-窗口函数

    一般的商业数据库(其实也就是DB2,Oracle,SQL Server)都具备窗口函数这个功能,只不过名称不同,我...

  • SQL窗口函数

    SQL窗口函数 partition by order by rank, dense_rank, row_numbe...

网友评论

      本文标题:SQL Server 窗口函数

      本文链接:https://www.haomeiwen.com/subject/zigbrqtx.html