
Bob Lyle 谈 DB2 中的 OLAP 函数
热 荐
【字体:小 大】
Bob Lyle 谈 DB2 中的 OLAP 函数
作者:- 文章来源:- 点击数:1180 更新时间:2006-4-22 
Bob Lyle
DB2 开发人员, IBM
2003 年 10 月 经验丰富的 DB2 开发人员 Bob Lyle 非常粗略地概述了 DB2 Universal Database 中强大的 OLAP 函数,并提供了关于如何使用这些函数的例子。

当我出席在佛罗伦萨召开的 IDUG EMEA 时,我惊讶地发现很少有用户对在 DB2® Universal Database 中引入的在线分析处理(OLAP)函数有较多的了解。虽然从表面上看这些函数只是一些简单的新函数,然而实际上它们是极其强大的。这种强大是建立在这些函数扩展了关系模型、使关系模型能够理解行集合内的排序方式(ordering)这一基础之上的。在此之前,如果您想执行任何与排序方式(按日期排序或其他方式的排序)有关的分析,您就不得不编写非常复杂的查询。现在,有了 OLAP 函数,这种复杂性大大减少了。在本文中,我希望对某些已经实现的函数给出一个非常粗略的概述,并提供一些关于如何使用这些函数的例子。本文中包括的所有函数都已经在 OLAP 修订案中标准化成 SQL99 标准。
排列函数
第一类引入到 DB2 中的 OLAP 函数是 排列(ranking)函数,它们是在 DB2 Version 6 中引入的。这些排列函数提供了定义一个集合(使用 PARTITION 子句),然后根据某种排序方式对这个集合内的元素进行排列的能力。例如,假设我们有一个雇员表,现在要对每个部门内的雇员薪水进行排列。要实现这一点,我们需要一个函数调用,这个函数调用可以完成以下工作: 将分区(集合)定义为各个部门 将集合内的排序方式定义为按薪水排序。
按照惯例,我们一般会将薪水高的排在前面,所以我们将指定一个对薪水的降序排序方式。下面的例子展示了这个查询的查询和输出。
select empnum, dept, salary,
rank() over (partition by dept
order by salary desc nulls last) as rank,
dense_rank() over (partition by dept order by salary desc nulls last)as denserank,
row_number() over (partition by dept order by salary desc nulls last)as rownumber
from emptab;
