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 ...
随机推荐
- bzoj 3489 A simple rmq problem —— 主席树套线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://www.itdaan.com/blog/2017/11/24/9b ...
- bzoj 3872 [ Poi 2014 ] Ant colony —— 二分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符 ...
- python名片管理系统
1.代码: (1)主程序 #!/usr/bin/env python # -*- coding: UTF-8 -*- import cards_tools # 无限循环,由用户主动决定什么时候退出循环 ...
- 摘抄 - linux 目录结构简介
/ 根目录 |—–/bin 软连接,指向 /usr/bin.存储一些命令,一般为用户命令 |—-/boot 系统启动相关的文件;包括启动时内核的一些配置,grub配置等等:一般为之分配300 ...
- 关于PHP的框架
使用PHP框架有优点也有缺点,优点是避免重复劳动.简化很多操作.方便团队项目开发及维护,框架已经帮助你完成了很多工作,业务层主要侧重于业务功能的开发,缺点是由于调用框架对系统性能会有一点影响,因为框架 ...
- bzoj 3709: [PA2014]Bohater【贪心】
先打能回血的,按消耗从小到大打: 然后按回血量降序打剩下的(把消耗和回血反着看就是上一种怪,打法一样): 中间体力小于0就输出无解 #include<iostream> #include& ...
- springboot(五) 加载配置文件优先级顺序
github代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service ...
- Unix\Linux | 总结笔记 | 命令_ WC
wc[选项][参数] wc命令用来计算数字.利用wc指令我们可以计算文件的Byte数.字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. -c或--byt ...
- CF1140G Double Tree
题解 首先如果我们要确定出每个\(dis_{i \to i+1 , i \in odd}\) 这个可以用两遍树形\(DP\)来解决 一遍是考虑走子树子树绕过来的 一遍是考虑从走祖先绕过来的 然后就可以 ...
- SQL SELECT DISTINCT 语句 用法
SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法 ...