Oracle排名函数(Rank)实例详解
--已知:两种排名方式(分区和不分区):使用和不使用partition
--两种计算方式(连续,不连续),对应函数:dense_rank,rank
·查询原始数据:学号,姓名,科目名,成绩
select * from t_score
| S_ID | S_NAME | SUB_NAME | SCORE |
| 1 | 张三 | 语文 | 80.00 |
| 2 | 李四 | 数学 | 80.00 |
| 1 | 张三 | 数学 | 0.00 |
| 2 | 李四 | 语文 | 50.00 |
| 3 | 张三丰 | 语文 | 10.00 |
| 3 | 张三丰 | 数学 | |
| 3 | 张三丰 | 体育 | 120.00 |
| 4 | 杨过 | JAVA | 90.00 |
| 5 | mike | c++ | 80.00 |
| 3 | 张三丰 | Oracle | 0.00 |
| 4 | 杨过 | Oracle | 77.00 |
| 2 | 李四 | Oracle | 77.00 |
| S_ID | S_NAME | SUB_NAME | SCORE | 名次 |
| 4 | 杨过 | Oracle | 77.00 | 1 |
| 2 | 李四 | Oracle | 77.00 | 1 |
| 3 | 张三丰 | Oracle | 0.00 | 3 |
| S_ID | S_NAME | SUB_NAME | SCORE | 名次 |
| 4 | 杨过 | Oracle | 77.00 | 1 |
| 2 | 李四 | Oracle | 77.00 | 1 |
| 3 | 张三丰 | Oracle | 0.00 | 2 |
| S_ID | S_NAME | SUB_NAME | SCORE | 名次 |
| 4 | 杨过 | JAVA | 90.00 | 1 |
| 4 | 杨过 | Oracle | 77.00 | 1 |
| 2 | 李四 | Oracle | 77.00 | 1 |
| 3 | 张三丰 | Oracle | 0.00 | 3 |
| 5 | mike | c++ | 80.00 | 1 |
| 3 | 张三丰 | 数学 | 1 | |
| 2 | 李四 | 数学 | 80.00 | 2 |
| 1 | 张三 | 数学 | 0.00 | 3 |
| 3 | 张三丰 | 体育 | 120.00 | 1 |
| 1 | 张三 | 语文 | 80.00 | 1 |
| 2 | 李四 | 语文 | 50.00 | 2 |
| 3 | 张三丰 | 语文 | 10.00 | 3 |
·查询各科前2名(分区排名)
·类似:新闻表,求栏目点击率在前3位的新闻。
商品表,求各类别销售额在前10位的商品。
|
1
2
3
4
5
6
7
|
select * from (select sc.s_id,sc.s_name,sub_name,sc.score,dense_rank() over(partition by sub_name order by score desc) 名次from t_score sc) xwhere x.名次<=2 |
|
S_ID
|
S_NAME
|
SUB_NAME
|
SCORE
|
名次
|
|
4
|
杨过
|
JAVA
|
90.00
|
1
|
|
4
|
杨过
|
Oracle
|
77.00
|
1
|
|
2
|
李四
|
Oracle
|
77.00
|
1
|
|
3
|
张三丰
|
Oracle
|
0.00
|
2
|
|
5
|
mike
|
c++
|
80.00
|
1
|
|
3
|
张三丰
|
数学
|
|
1
|
|
2
|
李四
|
数学
|
80.00
|
2
|
|
3
|
张三丰
|
体育
|
120.00
|
1
|
|
1
|
张三
|
语文
|
80.00
|
1
|
|
2
|
李四
|
语文
|
50.00
|
2
|
| S_ID | S_NAME | SUM_SCORE |
| 1 | 张三 | 80.00 |
| 2 | 李四 | 207.00 |
| 3 | 张三丰 | 130.00 |
| 4 | 杨过 | 167.00 |
| 5 | mike | 80.00 |
| S_ID | S_NAME | SUM_SCORE | 名次 |
| 2 | 李四 | 207.00 | 1 |
| 4 | 杨过 | 167.00 | 2 |
| 3 | 张三丰 | 130.00 | 3 |
| 1 | 张三 | 80.00 | 4 |
| 5 | mike | 80.00 | 4 |
脚本:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
create table t_score( autoid number primary key, s_id number(3), s_name char(8) not null, sub_name varchar2(20), score number(10,2));insert into t_score (autoid, s_id, s_name, sub_name, score)values (8, 1, '张三 ', '语文', 80);insert into t_score (autoid, s_id, s_name, sub_name, score)values (9, 2, '李四 ', '数学', 80);insert into t_score (autoid, s_id, s_name, sub_name, score)values (10, 1, '张三 ', '数学', 0);insert into t_score (autoid, s_id, s_name, sub_name, score)values (11, 2, '李四 ', '语文', 50);insert into t_score (autoid, s_id, s_name, sub_name, score)values (12, 3, '张三丰 ', '语文', 10);insert into t_score (autoid, s_id, s_name, sub_name, score)values (13, 3, '张三丰 ', '数学', null);insert into t_score (autoid, s_id, s_name, sub_name, score)values (14, 3, '张三丰 ', '体育', 120);insert into t_score (autoid, s_id, s_name, sub_name, score)values (15, 4, '杨过 ', 'java', 90);insert into t_score (autoid, s_id, s_name, sub_name, score)values (16, 5, 'mike ', 'c++', 80);insert into t_score (autoid, s_id, s_name, sub_name, score)values (3, 3, '张三丰 ', 'oracle', 0);insert into t_score (autoid, s_id, s_name, sub_name, score)values (4, 4, '杨过 ', 'oracle', 77);insert into t_score (autoid, s_id, s_name, sub_name, score)values (17, 2, '李四 ', 'oracle', 77);commit; |
Oracle排名函数(Rank)实例详解的更多相关文章
- oracle add_months函数的用法详解
如果需要取上一个月的数据,并且每天都要进行此操作,每次都需要改时间,的确非常的麻烦,所以想到了oracle add_months函数这个函数 oracle add_months函数: oracle a ...
- Oracle DECODE函数的用法详解
Oracle DECODE函数使用方法: 1.比较大小select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0. ...
- C# Oracle数据库操作类实例详解
本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- jquery中attr()与prop()函数用法实例详解(附用法区别)
本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是a ...
- PHP中spl_autoload_register()函数用法实例详解
本文实例分析了PHP中spl_autoload_register()函数用法.分享给大家供大家参考,具体如下: 在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这 ...
- Oracle存储过程返回游标实例详解
复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...
- ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解
ORACLE中RECORD.VARRAY.TAB.IS REF CURSOR LE的使用及实例详解 create or replaceprocedure PRO_RECORD_ROW_TAB_EXAM ...
- 这个贴子的内容值得好好学习--实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化
感觉要DJANGO用得好,ORM必须要学好,不管理是内置的,还是第三方的ORM. 最最后还是要到SQL.....:( 这一关,慢慢练啦.. 实例详解Django的 select_related 和 p ...
随机推荐
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- asp.net 常用代码
asp.net 下拉菜单选中 ddlCity.SelectedIndex = ddlCity.Items.IndexOf(ddlCity.Items.FindByValue(")); 关于. ...
- Sleep示例分析
sleep让"当前线程"由“运行状态”进入到“休眠(阻塞)状态”,sleep结束,线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行. 示例分析: pu ...
- HDU1452:Happy 2004(积性函数)(因子和)
题意 给出\(x\),求\(2004^x\)的所有因子和 分析 \(2004=2*2*3*167\) 则\(2004^x\)=\(2^{2x}*3^x*167^x\) s[\(2004^x\)]=s[ ...
- shiro 登录
@Controllerpublic class LoginController { @RequestMapping(value="/login") public @Response ...
- Code:Blocks 中文乱码问题原因分析和解决方法
下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...
- jQuery 动作效果
隐藏和显示 jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: jQuery toggle() 通过 jQ ...
- SIFT特征点检测与匹配
SIFT的步骤如下: (1) 尺度空间极值检测(Scale-space Extrema Detection) 也就是在多尺度高斯差分(Difference of Gauss)空间中检测极值点(3x3x ...
- android:process用法
1.作用 android:process将组件在新进程中运行. 2.应用范围 可以出现在<application> <activity>, <service>, ...
- 安装CentOS--设置网络_1
(1)在登录黑框中输入如下命令,让CentOS 7自动获取一个IP地址: # dhclient (2)正常情况下不会有任何输出内容.用如下命令查看获取到的IP地址: # ip addr 它将返回如图所 ...