`
downpour
  • 浏览: 717490 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
00a07ae5-264f-3774-8903-8ad88ce08cb0
Struts2技术内幕
浏览量:117952
4d8508f2-c0dd-3df8-9483-04cc612afbbc
SpringMVC深度探险...
浏览量:230647
社区版块
存档分类
最新评论

有关oracle中聚合函数rank和dense_rank的使用

阅读更多
今天碰到了一个业务场景,需要对一个表做分组分类的聚合查询。由于表很大,所以在数据库端解决这个问题是最佳的选择。于是请了Ray同学帮忙,他教了我一个Oracle上的聚合函数的使用,非常不错。

其实现在Oracle对于rank和dense_rank已经支持合计功能,不过这次我仅仅使用了其分析功能。具体语法如下:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。

下面给出一些来自网上的示例:

TABLE:S (subject,mark)

数学,80
语文,70
数学,90
数学,60
数学,100
语文,88
语文,65
语文,77

现在我想要的结果是:每门科目的前3名的分数

数学,100
数学,90
数学,80
语文,88
语文,77
语文,70
那么语句就这么写:

select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
where T.rk<=3;

dense_rank与rank()用法相当,但是有一个区别:dence_rank在处理相同的等级时,等级的数值不会跳过。rank则跳过。

例如:表

    A B C
a          liu          wang
a          jin          shu
a          cai          kai
b          yang      du
b          lin          ying
b          yao        cai
b          yang      99

例如:当rank时为:

select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m

A          B             C          LIU
a          cai          kai          1
a          jin           shu        2
a          liu           wang     3
b          lin           ying        1
b          yang      du           2
b          yang      99           2
b          yao        cai           4

而如果用dense_rank时为:

select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m

A          B             C          LIU
a          cai          kai          1
a          jin           shu        2
a          liu           wang     3
b          lin           ying        1
b          yang      du           2
b          yang      99           2
b          yao        cai           3




分享到:
评论
3 楼 guiltyguitar 2010-12-04  
select * from 
2 楼 yongsky 2009-08-27  
用row_number分析函数也是可以的..

select * from (row_number() over(partition by subject order by mark desc) rk,S.* from S) T 
where T.rk<=3; 


顺便对JavaEye发下牢骚:在回帖的时候要求做个测验,结果都答对了还是没有跳到回帖页面,任然要我答题,浪费了我差不多半个小时,这点确实有点LJ。
1 楼 lit0302 2008-11-21  
en ,不错

相关推荐

    Oracle开发之分析函数(Rank, Dense_rank, row_number)

    Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    5. **聚合函数**: COUNT、SUM、AVG、MAX、MIN,用于对一组值进行统计。COUNT返回行数,SUM计算总和,AVG求平均值,MAX和MIN找出最大值和最小值。 6. **系统信息函数**: USER、DBMS_METADATA.GET_DDL等,用于...

    【Oracle】LISTAGG函数的使用.pdf

    * LISTAGG 函数可以与其他分析函数和聚合函数组合使用,以实现更加复杂的数据处理。 * LISTAGG 函数可以用于实现数据的分组和合并,提高数据处理的效率和简洁性。 * 在使用 LISTAGG 函数时,需要根据具体情况选择...

    oracle函数大全-数字-字符-日期-聚合函数

    最后,提供的文档和文本文件,如"oracle日期和时间处理汇总.doc"、"Oracle聚合函数RANK和dense_rank的使用.htm"等,都是极好的学习资源,可以深入研究每个函数的详细信息和示例。通过阅读和实践,你将能够充分利用...

    oracle常用分析函数与聚合函数的用法

    在Oracle数据库中,分析函数和聚合函数是SQL查询中用于处理和汇总数据的重要工具。本文将详细介绍两者的主要功能和用法。 首先,我们关注的是排名函数。在Oracle中,有三种常用的排名函数: 1. `RANK()`: 这个函数...

    Oracle分析函数

    Oracle 分析函数中提供了多种聚合函数,包括: 3.1 AVG 函数 AVG 函数用于计算表达式的平均值。 3.2 CORR 函数 CORR 函数用于计算两个表达式之间的互相关性。 3.3 COUNT 函数 COUNT 函数用于计算表达式的计数...

    ORACLE_分析函数大全

    除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...

    Oracle中的分析函数详解

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据主导地位。其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自...

    Oracle分析函数使用总结

    在Oracle数据库中,分析函数主要分为评级函数、窗口函数和聚合函数等几类。本文将重点讨论评级函数的使用,包括RANK()、DENSE_RANK()、CUME_DIST()、PERCENT_RANK()和NTILE(),以及ROW_NUMBER()。 1. RANK() 函数:...

    oracle开窗函数学习技巧总结

    - 当`OVER`子句中使用`PARTITION BY NULL`时,意味着所有的行都被视为同一个分区,即整个结果集被视为一个整体来进行计算。 #### 六、总结 通过本文的学习,我们可以看到Oracle开窗函数的强大之处。无论是进行复杂...

    ORACLE常用分析函数说明

    它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。 开窗函数是分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。开窗函数可以指定数据窗口的大小和范围,例如...

    Oracle分析函数使用的总结.doc

    本文将详细介绍Oracle分析函数中的评级函数,包括RANK()、DENSE_RANK()、CUME_DIST()、PERCENT_RANK()和NTILE(),并结合示例进行解析。 1. RANK()函数: RANK()函数返回每个行在指定排序下的排名。如果两个或更多...

    oracle 10G函数大全(中文)

    这个中文帮助文档是开发者和DBA们在进行Oracle数据库操作时的重要工具,它能提供详尽的函数解释、用法示例以及相关提示。 1. **SQL函数类别**: - 数学函数:如ABS、MOD、ROUND等,用于数学计算和数值处理。 - ...

    oracle函数大全中文api文档

    ROW_NUMBER,RANK,DENSE_RANK提供窗口排序,LEAD和LAG获取当前行的前一行或后一行数据,FIRST_VALUE和LAST_VALUE获取窗口内的第一个或最后一个值。 这个中文API文档将详细介绍这些函数的语法、参数、返回值以及...

    Oracle内建函数大全

    - CONNECT_BY_ROOT/CONNECT_BY_ISLEAF:在层次查询中使用,标识根节点或叶子节点。 10. **系统信息函数** - USER:返回当前用户的名称。 - DBMS_METADATA:获取对象的DDL语句,用于脚本生成。 以上只是Oracle内...

    Oracle内置SQL函数-分类整理大全

    在数据分析中,聚合函数如COUNT、SUM、AVG、MAX和MIN经常被用到。COUNT计数,SUM求和,AVG计算平均值,MAX和MIN找到最大值和最小值。GROUP BY和HAVING语句常与这些函数一起使用,用于分组数据并应用条件过滤。 五、...

    Oracle分析函数使用总结[定义].pdf

    Oracle分析函数是数据库查询中非常强大的工具,它们用于在数据集上执行聚合操作,并返回每个行的上下文信息。在Oracle数据库中,分析函数能够帮助我们处理复杂的分组和排序需求,尤其在报告和数据分析中非常有用。...

    oracle ranking function.doc

    Oracle 分析函数是数据库查询中的一种强大工具,用于在数据集上执行聚合操作,同时保持行的原始顺序。本文将详细介绍其中的评级函数,包括RANK()、DENSE_RANK()、PERCENT_RANK()、CUME_DIST()以及NTILE(),并以实际...

    oracle 10G函数大全

    6. **聚合函数**: - COUNT:计算行数。 - SUM:计算数值列的总和。 - AVG:计算平均值。 - MAX/MIN:找到数值列的最大值/最小值。 7. **转换函数**: - TO_CHAR/TO_DATE:将数值或日期转换为字符串,反之亦然...

Global site tag (gtag.js) - Google Analytics