SQL Server Window Function窗体函数之SQL Windowing
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 窗体函数本身就经历过了很好的调优处理, 所以性能会更加好一 些. (编辑:徐州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |