先看一个例子:
rank()对表中的数据进行分级排序. 譬如有张学生成绩统计单的表STUDENT_RESULT name number kemu fenshu li 0113101 高数 90 zhang 0113098 高数 80 wang 0113077 高数 70 li 0113101 物理 80 zhang 0113098 物理 90 wang 0113077 物理 70
我如果要检索出表中高数的前两名和物理的前两名 那么可以通过使用 RANK()方法达到目的
--首先 通过kemu进行分类,然后按照fenshu降序排序 select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t
结果 rk name number kemu fenshu 1 li 0113101 高数 90 2 zhang 0113098 高数 80 3 wang 0113077 高数 70 1 zhang 0113098 物理 90 2 li 0113101 物理 80 3 wang 0113077 物理 70
--然后,检索出rk<=2的记录,即取出前两名 select * from (select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t) as y where y.rk<=2;
结果 rk name number kemu fenshu 1 li 0113101 高数 90 2 zhang 0113098 高数 80 1 zhang 0113098 物理 90 2 li 0113101 物理 80
----------------------------------------------------------------------------------------------
- RANK
-
对行排序并对每行指定等级。等级定义为就排序而言唯一的之前行的数目加 1。如果两行或多行的相对顺序因为具有重复行值而不能确定,则会指定相同等级编号。如果有重复的行值,则分等级结果可能造成编号中有间隔。显示哪些分等级结果来自一组样本行值的 RANK 函数的示例。
RANK 函数的典型语法为:
RANK ( ) OVER (ORDER BY sort-key-expression expression-order)
其中 sort-key-expression 是要分等级的数据集,而 expression-order 是关键字(ASC 或 DESC),它按升序或降序次序对 sort-key-expression 的值排序。DB2 Cube Views 要求 sort-key-expression 充当现有量度而不是列或属性。而且,DB2 Cube Views 不支持由 DB2 UDB 随此函数提供的 PARTITION BY 子句。有关 RANK 函数的更多信息,可在“DB2 UDB 信息中心”中找到。
- DENSERANK
-
对行排序并对每行指定等级。行的等级定义为确实在该行之前的行数加 1。因此,分等级结果将是连续的,在等级编号中没有间隔。 显示哪些分等级结果来自一组样本行值的 DENSERANK 函数的示例。
DENSERANK 函数的典型语法为:
DENSERANK ( ) OVER (ORDER BY sort-key-expression expression-order)
其中 sort-key-expression 是要分等级的数据集,而 expression-order 是关键字(ASC 或 DESC),它按升序或降序次序对 sort-key-expression 的值排序。DB2 Cube Views 要求 sort-key-expression 充当现有量度而不是列或属性。而且,DB2 Cube Views 不支持由 DB2 UDB 随此函数提供的 PARTITION BY 子句。有关 DENSERANK 函数的更多信息,可以在“DB2 UDB 信息中心”中找到。
- ROWNUMBER
-
根据排序计算该行的顺序行号,第一行从 1 开始。如果未指定 ORDER BY 子句,则以任何顺序将行号指定给各行。
ROWNUMBER 函数的典型语法为:
ROWNUMBER ( ) OVER ([ORDER BY sort-key-expression expression-order])
其中 sort-key-expression 是要分等级的数据集,而 expression-order 是关键字(ASC 或 DESC),它按升序或降序次序对 sort-key-expression 的值排序。DB2 Cube Views 需要现有量度(而不是列或属性)用作此函数的数据源。而且,DB2 Cube Views 不支持由 DB2 UDB 随此函数提供的 PARTITION BY 子句。有关 ROWNUMBER 函数的更多信息,可以在“DB2 UDB 信息中心”中找到。
这些 OLAP 函数未列示在“SQL 表达式构建器”函数和常量列表中。
表 7. 使用 RANK 和 DENSERANK 函数对一组样本值分等级的结果
行值 |
排序 |
来自 RANK 函数的分等级结果 |
来自 DENSERANK 函数的分等级结果 |
100 |
1 |
1 |
1 |
35 |
2 |
2 |
2 |
23 |
3 |
3 |
3 |
8 |
4 |
4 |
4 |
8 |
4 |
4 |
5 |
6 |
5 |
6 |
6 |
|