Oracle聚合函数RANK和dense_rank的使用

文章作者 100test 发表时间 2011:03:17 19:34:08
来源 100Test.Com百考试题网


  聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。
  
  在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。
  
  其语法为:
  
  RANK ( ) OVER ( [query_partition_clause] order_by_clause )
  
  在9i版本新增加了合计功能(aggregate),即对给定的参数值在设定的排序查询中计算出其排序值。这些参数必须是常数或常值表达式,且必须和ORDER BY子句中的字段个数、位置、类型完全一致。
  
  其语法为:
  
  RANK ( expr [, expr]... ) WITHIN GROUP
  ( ORDER BY
  expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
  [, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
  )
  
  例子1:
  
  有表Table内容如下
  
  COL1 COL2
    1 1
    2 1
    3 2
    3 1
    4 1
    4 2
    5 2
    5 2
    6 2
  
  分析功能:列出Col2分组后根据Col1排序,并生成数字列。比较实用于在成绩表中查出各科前几名的信息。
  
  SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) "Rank" FROM table a.
  
  结果如下:
  
  COL1 COL2 Rank
    1 1   1
    2 1   2
    3 1   3
    4 1   4
    3 2   1
    4 2   2
    5 2   3
    5 2   3
    6 2   5
  
  例子2:
  
  TABLE:A (科目,分数)
  
  数学,80
  语文,70
  数学,90
  数学,60
  数学,100
  语文,88
  语文,65
  语文,77
  
  现在我想要的结果是:(即想要每门科目的前3名的分数)

相关文章


事务队列等待深入分析:索引争用
Oracle数据库操作存储
oracle中imp命令详解
Oracle面试题集锦
Oracle聚合函数RANK和dense_rank的使用
oracle中to_date格式
ORACLE多表关联的0update语句
Oracle用户角色权限管理
oracle用户创建及权限设置
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛