Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1213444
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:43:39

       分析函数的关键特征是它们允许结果集的单行可以包括计算的多行交叉而不需要在整个结果集上处理GROUP BY。其允许多行和单行数据在一个select语句中而不需要部署子查询。

分析函数的语法

       FUNCTION() OVER ( < >)

       PARTITION BY定义函数将处理的组,如果partition by被忽略,那么整个select返回的数据集将作为一个活动分区。

       ORDER BY排序分区内的数据,可以声明ASC/DESC,以及NULLS FIRSTNULLS LAST标识null的处理。

       WINDOWING CLAUSE不能在每个分区函数上使用,如果可用,必须和ORDER BY一起使用。窗口子句声明了将在函数中计算的当前行周围的行集。窗口可以定义为ROWSRANGEROWS相对于活动分区中的行数,而RANGE则查看包含在这些行中的值。默认为ROWS UNBOUNDED PROCEDING事实上包含了所有行。

分析函数的列表

       分析函数通常分为三类,数组,聚集,其他。

       最常用的函数包括:

函数

类型

Partition by

Order By

Window

DENSE_RANK

数组

可选

必须

--

RANK

数组

可选

必须

--

ROW_NUMBER

数组

可选

必须

--

NTILE

数组

可选

必须

--

AVG

聚集

可选

可选

可选

COUNT

聚集

可选

可选

可选

SUM

聚集

可选

可选

可选

RATIO_TO_REPORT

聚集

可选

--

--

FIRST_VALUE

其他

可选

可选

可选

LAST_VALUE

其他

可选

可选

可选

LAG

其他

可选

必须

--

LEAD

其他

可选

必须

--

MAX

其他

可选

可选

可选

MIN

其他

可选

可选

可选

       前三个函数基本相同,只是处理重复数值上有所不同:

Value

ROW_NUMBER

DENSE_RANK

RANK

1000

1

1

1

2000

2

2

2

2000

3

2

2

3000

4

3

4

       ROW_NUMBER返回行在活动窗口中的偏移量;

       DENSE_RANK返回行值在活动窗口中的大小等级;

       RANK返回行值在活动窗口中的大小等级,但是增量依赖于在行中的位置;

       通常这些函数用来计算top-n并将之嵌入结果集的列中。

      

       需要注意的是,分析函数在输出排序结果集之前进行。因此不能作为wherehaving的条件,并且只能在SQL中使用,而不能在PL/SQL中使用。在PL/SQL中只能作为动态SQL使用,或封装在视图中。

       并且分析函数是非确定性函数。

阅读(1033) | 评论(0) | 转发(0) |
0

上一篇:关于null

下一篇:分析函数举例

给主人留下些什么吧!~~