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 ) x where 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 ...
随机推荐
- codeforces round 417 div2 补题 CF 812 A-E
A Sagheer and Crossroads 水题略过(然而被Hack了 以后要更加谨慎) #include<bits/stdc++.h> using namespace std; i ...
- Jquery选择器大全、属性操作、css操作、文档、事件等
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. jQuery对象 jQuery产 ...
- Vijos P1782 借教室 ( 前缀和&&差分序列)
题目链接:借教室 题意:给出n天得教室数目,m个借教室得单子,按顺序借教室,问哪个单子不满足并输出 分析:可以用线段树做,会T,常数比较大,选择用差分序列维护前缀和,二分答案即可 #include&l ...
- react hooks 全面转换攻略(三) 全局存储解决方案
针对 react hooks 的新版本解决方案 一.redux维持原方案 若想要无缝使用原来的 redux,和其配套的中间件 promise,thunk,saga 等等的话 可以使用 redux-re ...
- (图论)51NOD 1264 线段相交
给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". 输入 第1行:一个 ...
- iOS 计算字符串显示宽高度
ObjC(Category of NSString): - (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size{ ...
- _bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【分块】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 见一周目记录:http://www.cnblogs.com/ciao-sora/p/6 ...
- Mondriaan's Dream POJ - 2411
Mondriaan's Dream POJ - 2411 可以用状压dp,但是要打一下表.暴力枚举行.这一行的状态.上一行的状态,判断如果上一行的状态能转移到这一行的状态就转移. 状态定义:ans[i ...
- Oracle查看所有表空间的数据使用情况
-- 查看所有表空间的数据使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)& ...
- SecureCRT 迁移到新环境,导出配置文件目录 转
SecureCRT 打开SecureCRT,点击菜单栏的“选项”--“全局选项” 在打开的窗口中,选择“常规”,在右侧找到“配置文件夹”,这个就是SecureCRT的配置文件目录. 复制这个路径并且进 ...