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 ...
随机推荐
- 搭建gerrit服务器(apache&nginx反向代理方式)
这段时间,想搭建一个gerrit,用于代码托管,gerrit的搭建,网上有很多种教程,但是自己按照别人的教程逐步操作,一直出现诸多问题.最头痛的就是:Configuration Error Check ...
- Pessimistic Offline Lock悲观离线锁
每次只允许一个业务事务来访问数据,以防止并发业务事务中的冲突. 离线并发处理通常会出现多个业务事务操作同一数据. 最简单的办法是为整个业务事务保持一个系统事务.但是事务系统不适合于处理长事务. 首选乐 ...
- Swift4 扩张(Extenstion), 集合(Set)
创建: 2018/03/09 完成: 2018/03/10 更新: 2018/04/19 修改小标题 [扩张的定义与使用协议] -> [通过扩张来采用协议] 更新: 2018/09/18 标题 ...
- 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)
传送门 首先,答案等于$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是说所有情况的和除以总的情况数 因为这是一条链,我们 ...
- 洛谷P2254 [NOI2005]瑰丽华尔兹(单调队列)
传送门 题解 大概就是设$dp[i][x][y]$表示在第$i$个时间段,在$(x,y)$时的最大滑动距离 然后转移是$dp[i][x][y]=max(dp[i-1][x][y],dp[i][x'][ ...
- glance镜像服务
一.glance介绍: 因为云平台是提供Iass层的基础设施服务,我们拿到的是一台虚拟机,那么要用虚拟机的话必须有底层的镜像做支撑,所以说镜像的话也有一个服务来管理.但是我们云平台用的镜像不是装操作系 ...
- 【POJ - 1661】Help Jimmy (动态规划)
Help Jimmy Descriptions: "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长 ...
- 洛谷 P2061 [USACO07OPEN]城市的地平线City Horizon
简化版的矩形面积并,不用线段树,不用离散化,代码意外的简单 扫描线,这里的基本思路就是把要求的图形竖着切几刀分成许多矩形,求面积并.(切法就是每出现一条与y轴平行的线段都切一刀) 对于每一个切出来的矩 ...
- SpringCloud开发学习总结(一)—— 基础知识
1:Dubbo和Spring Cloud的关系 就我个人对这两个框架的使用经验和理解,打个不恰当的比喻:使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为 ...
- jacaScript数组
1.var arr=['1','2','3'] typeof arr (判断数组类型) print(arr)打印数组内容 2.arr[100]='x', 数组中间自动添加,alert(arr. ...