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 ...
随机推荐
- Redis: Redis Desk Manager Setup
ylbtech-Redis: Redis Desk Manager Setup 1.返回顶部 1. redis-desktop-manager-0.8.1.3847 2. 2. 安装返回顶部 1. 2 ...
- Gym 100531J Joy of Flight (几何)
题意:你从开始坐标到末尾坐标,要经过 k 秒,然后给你每秒的风向,和飞机的最大速度,问能不能从开始到末尾. 析:首先这个风向是不确定的,所以我们先排除风向的影响,然后算出,静风是的最小速度,如果这都大 ...
- Eclipse打开Android项目报Parsing Data for android-21 failed错误的解决办法(转载)
转载:http://segmentfault.com/blog/hongliang/1190000000739285 今天手贱,用android命令打开SDK Manager下载了最新的Android ...
- PCB Genesis SET拼板(圆形板拼板) 实现效果(二)
越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然借助多边形算法可以开发出更多的PCB实用的工具出来 ...
- 项目Alpha版本发布
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业的要求在哪里 https://edu.cnbl ...
- c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序
零散知识点: 非格式化输入输出:getchar().putchar() 格式化输入输出 :scanf().printf() 字符串输入输出 :gets() 或 scanf().puts() 或 ...
- Spring @requestBody
页面提交请求参数有两种,一种是form格式,一种是json格式 jQuery的$.post方法虽然也可以传递json格式数据,但实际上是用的form格式提交,jquery会帮你把json转成form格 ...
- Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)_python
我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴. 1.最简单 import urllib.request response = ...
- Triangular Pastures POJ - 1948
Triangular Pastures POJ - 1948 sum表示木条的总长.a[i]表示第i根木条长度.ans[i][j][k]表示用前i条木条,摆成两条长度分别为j和k的边是否可能. 那么a ...
- 贪心+模拟 ZOJ 3829 Known Notation
题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...