SQL Server 2012 支持以下分析函数:CUME_DIST、PERCENT_RANK、FIRST_VALUE、LAST_VALUE、LAG、LEAD、PERCENTILE_CONT、PERCENTILE_DISC,用来基于一组行计算聚合值。不过,与聚合函数不同,它们可能针对每个组返回多行。 可以使用分析函数来计算移动平均线、运行总计、百分比或一个组内的前 N 个结果。
- CUME_DIST( )与PERCENT_RANK( )
CUME_DIST用来计算某个值在一组值内的累积分布,即在一组值中的相对位置。对于行 r,假定采用升序,r 的 CUME_DIST 是值低于或等于r 的值的行数除以在分区或查询结果集中求出的行数。PERCENT_RANK用来计算一组行内某行的相对排名,即计算一个值在查询结果集或分区中的相对位置。
MSDN:http://msdn.microsoft.com/zh-cn/library/hh231078.aspx & http://msdn.microsoft.com/zh-cn/library/hh213573.aspx
- FIRST_VALUE()与LAST_VALUE()
FIRST_VALUE()用来返回有序值集中的第一个值,而LAST_VALUE()则返回有序值集中的最后一个值。
MSDN:http://msdn.microsoft.com/zh-cn/library/hh213018.aspx & http://msdn.microsoft.com/zh-cn/library/hh231517.aspx
- LAG()与LEAD()
LAG()用来访问相同结果集的先前行中的数据,而不使用 SQL Server 2012 中的自联接。LAG 以当前行之前的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与先前行中的值进行比较。LEAD()用来访问相同结果集的后续行中的数据,而不使用 SQL Server 2012 中的自联接。LEAD 以当前行之后的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与后续行中的值进行比较。
MSDN:http://msdn.microsoft.com/zh-cn/library/hh231256.aspx & http://msdn.microsoft.com/zh-cn/library/hh213125.aspx
-
PERCENTILE_CONT()与PERCENTILE_DISC()
PERCENTILE_CONT()用来基于 SQL Server 2012 列值的连续分布计算百分位数。将内插结果,且结果可能不等于列中的任何特定值。
PERCENTILE_DISC()用来计算 SQL Server 2012 中整个行集内或行集的非重复分区内已排序值的特定百分位数。对于给定的百分位数的值 P,PERCENTILE_DISC 对 ORDER BY 子句中表达式的值进行排序,并返回具有最小 CUME_DIST 值且大于或等于P 的值(遵照相同的排序规范)。 例如,PERCENTILE_DISC (0.5) 将计算表达式的第 50 百分位数(也即中值)。 PERCENTILE_DISC 基于列值的离散分布来计算百分位数;结果等于列中的一个特定值。
注意:这两个函数可能不返回相同的值。 这是因为,PERCENTILE_CONT 内插适当的值,而无论它在数据集中是否存在,而 PERCENTILE_DISC 始终从数据集中返回实际值。
MSDN:http://msdn.microsoft.com/zh-cn/library/hh231473.aspx & http://msdn.microsoft.com/zh-cn/library/hh231327.aspx