加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server Window Function窗体函数之SQL Windowing

发布时间:2016-08-14 10:42:10 所属栏目:MsSql教程 来源:站长网
导读:SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理 Running totals Moving averages Gaps and islands 先看一个简单的应用 - 按照订
SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理

Running totals

Moving averages

Gaps and islands

先看一个简单的应用 - 按照订单额从高到低对订单表信息做一个排名

USE TSQL2012
GO
    
SELECT orderid,
       orderdate,
       val,
       RANK() OVER(ORDER BY val DESC) AS rnk
FROM Sales.OrderValues
ORDER BY rnk

查询结果 -

OrderID OrderDate             Val    Rnk

10865    2008-02-02 00:00:00.000    16387.50    1

10981    2008-03-27 00:00:00.000    15810.00    2

11030    2008-04-17 00:00:00.000    12615.05    3

10889    2008-02-16 00:00:00.000    11380.00    4

10417    2007-01-16 00:00:00.000    11188.40    5

10817    2008-01-06 00:00:00.000    10952.85    6

10897    2008-02-19 00:00:00.000    10835.24    7

10479    2007-03-19 00:00:00.000    10495.60    8

OVER 的作用

OVER 的作用就是定义了行集窗体,这个窗体的集合为当前行提供了一个上下文环境. RANK 函数根 据指定的集合以及行集的排序顺序计算出当前行的排名, 以 Rnk = 5 为例, 排序后这条数据的前面有 4条数据,所以它的排名就是 4 + 1 = 5

再总结简单一点就是, OVER 定义了一个行的集合, 它是一个函数, 每次向当前行返回一个唯一的 值, 如何返回? 在这个例子中就使用 RANK 函数返回了当前行的一个排名.

与OVER搭配使用的其它函数

聚合的函数 - SUM, COUNT, MIN, MAX

排名的函数 - RANK, DENSE_RANK, ROW_NUMBER, NTILE

Distribution 函数 - PERCENT_RANK, CUME_DIST, PERCENTILE_CONT, PERCENTILE_DISC

Offset 函数  - LAG, LEAD, FIRST_VALUE, LAST_VALUE

SQL Server Window Function 的应用

窗体函数的应用非常广泛 - 像分页,去重,分组的基础上返回 Top N 的行, 计算 Running Totals,Gaps and islands, 百分率, Hierarchy 排序, Pivoting 等等

使用 Windows 窗体函数的原因一方面是因为 SQL Server 的优化器不够完美, 尽管足够强大, 但 是并不会涵盖所有的优化规则.

第二, 在执行计划的选择上,SQL Server 并不会真正执行所有有可能的计划来获取一个最优的选 择,对于 SQL 本身这种指令性语言的解析和优化优化器只能说是在最短时间里尽量做到足够好,选择 一个好的执行计划. 而 Window 窗体函数本身就经历过了很好的调优处理, 所以性能会更加好一 些.

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读