分享

DB2中的rank()

 思奇剑 2008-06-26

先看一个例子:

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 是关键字(ASCDESC),它按升序或降序次序对 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 是关键字(ASCDESC),它按升序或降序次序对 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 是关键字(ASCDESC),它按升序或降序次序对 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


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多