码迷,mamicode.com
首页 > 其他好文 > 详细

分析函数

时间:2015-06-24 00:34:06      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

在OLAP这类系统或者DW这类数据库中,作为某份报表的数据源,我们常常需要在某个存储过程中编写复杂的运算代码来汇总数据。分析函数便具备这样的能力,引用多行的数据值来进行多层面的聚合运算,在数据子集中进行颗粒度级别的排序控制.

 

分析函数不能嵌套,但是可以通过用视图或者表函数封装然后再套上一层分析函数

语法:

function(argument1,argument2,argument3...) over ([partition by] [order by] [windowing-clause])

和SQL Server中的Window Function其实类似,不过这里多了些不同的东西

首先,order by子句后面跟上NULLS FIRST或者NULLS LAST来指定空值是排在前面还是后面

开窗子句(windowing-clause)是SQL Server没有的(至少据我了解到SQL Server 2012好像还没有)。开窗子句是分析函数运算的数据子集,又称滑动窗口。我们可以使用说明子句来指定滑动窗口自的上下边界。说明子句的语法:

[ROWS | RANGE] BETWEEN <Start expr> AND <End expr>
Whereas
<Start expr> is [UNBOUNDED PRECEDING | CURRENT ROW | n PRECEDING | n FOLLOWING]
<End expr> is [UNBOUNDED FOLLOWING | CURRENT ROW | n PRECEDING | n FOLLOWING]

比如:

sum(sum(tot_sales)) over (order by month rows between unbounded preceding and unbounded following) total_sales

 

分析函数有很多,下图来自《oracle高级编程》一书

技术分享

 

1) Lag & Lead -- 前者:访问一个分区或者结果集中之前的一行;后者:访问一个分区或者结果集中之后的一行

上面那样讲有点难理解,其实就是”错位“,实现效果就是同张表的自连接,条件是a.col1=a.co1+1或者a.col1=a.co1-1。结果就像这样:

1  

2  1

3  2

4  3

上面是lag

 

那lead呢

1  2  

2  3

3  4

4

 

两个函数都提供了default value的选项,可以把空值补充为我们想要的值.它们俩也都能带上PARTITION BY。

 

2)First_Value & Last_Value -- 前者:访问一个分区或者结果集的第一行;后者:访问一个分区或者结果集的最后一行;

这个就不同解释了吧。访问分区(子集)或者整个结果集的两个边界的栏位值。

 

3)

分析函数

标签:

原文地址:http://www.cnblogs.com/jenrrychen/p/4596644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!