`

Oracle函数Rank Over Partition使用实例详解(一)

阅读更多

Rank()使用说明:

 

a. 函数简介:

    返回结果集分区内指定字段的值的排名,指定字段的值的排名是相关行之前的排名加一。

b. 语法:

    RANK() OVER([<partiton_by_clause>]<order by clause>)

c. 参数说明:

    partition_by_clause 将from子句生成的结果集划分为应用到RANK函数的分区。

    Order_by_clause确定将RANK值应用到分区中的行时所使用的顺序。

 

d. 以下是实例使用:

 

 

1. 创建测试表

 

--创建表
-- Create table
create table T_SCORE
(
  AUTOID   NUMBER not null,
  S_ID     NUMBER(3),
  S_NAME   CHAR(8) not null,
  SUB_NAME VARCHAR2(20),
  SCORE    NUMBER(10,2)
);
-- Add comments to the table 
comment on table T_SCORE
  is '学生成绩表';
-- Add comments to the columns 
comment on column T_SCORE.AUTOID
  is '主键ID';
comment on column T_SCORE.S_ID
  is '学生ID';
comment on column T_SCORE.S_NAME
  is '学生姓名';
comment on column T_SCORE.SUB_NAME
  is '科目';
comment on column T_SCORE.SCORE
  is '成绩';

 

2. 创建测试记录

 

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (8, 1, '张三    ', '语文', 80.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (9, 2, '李四    ', '数学', 80.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (10, 1, '张三    ', '数学', 0.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (11, 2, '李四    ', '语文', 50.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (12, 3, '张三丰  ', '语文', 10.00);

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.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (15, 4, '杨过    ', 'JAVA', 90.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (16, 5, 'mike    ', 'c++', 80.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (3, 3, '张三丰  ', 'Oracle', 0.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (4, 4, '杨过    ', 'Oracle', 77.00);

insert into t_score (AUTOID, S_ID, S_NAME, SUB_NAME, SCORE)
values (17, 2, '李四    ', 'Oracle', 77.00);

 

3. 分不同情况查询

3.1 查询所有的学生成绩

 

--1.查询所有的学生成绩
select t.s_id 学号, t.s_name 姓名, t.sub_name 科目, t.score 成绩
  from t_score t;

查询结果:

学号 姓名 科目 成绩
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

 

3.2 查询Oracle科目成绩名次-非连续rank

--2.查询Oracle科目成绩名次-非连续rank
select t.s_id 学号,
       t.s_name 姓名,
       t.sub_name 科目,
       t.score 成绩,
       rank() over(order by score desc nulls last) 名次
  from t_score t
 where t.sub_name = 'Oracle';

 查询结果:

学号 姓名 科目 成绩 名次
4 杨过     Oracle 77.00 1
2 李四     Oracle 77.00 1
3 张三丰   Oracle 0.00 3

 

3.3查询Oracle科目成绩名次-连续dense_rank

--3.查询Oracle科目成绩名次-连续dense_rank
select t.s_id 学号,
       t.s_name 姓名,
       t.sub_name 科目,
       t.score 成绩,
       dense_rank() over(order by score desc nulls last) 名次
  from t_score t
 where t.sub_name = 'Oracle';

 查询结果:

 

学号 姓名 科目 成绩 名次
4 杨过     Oracle 77.00 1
2 李四     Oracle 77.00 1
3 张三丰   Oracle 0.00 2

 

3.4 查询各学生各科排名

--4.查询各学生各科排名
select t.s_id 学号,
       t.s_name 姓名,
       t.sub_name 科目,
       t.score 成绩,
       dense_rank() over(partition by t.s_name order by score desc nulls last) 名次
  from t_score t;

 查询结果:

 

学号 姓名 科目 成绩 名次
5 mike     c++ 80.00 1
2 李四     数学 80.00 1
2 李四     Oracle 77.00 2
2 李四     语文 50.00 3
4 杨过     JAVA 90.00 1
4 杨过     Oracle 77.00 2
1 张三     语文 80.00 1
1 张三     数学 0.00 2
3 张三丰   体育 120.00 1
3 张三丰   语文 10.00 2
3 张三丰   Oracle 0.00 3
3 张三丰   数学
4

 

3.5 查询各科名次(分区)

--5.查询各科名次(分区)
select t.s_id 学号,
       t.s_name 姓名,
       t.sub_name 科目,
       t.score 成绩,
       dense_rank() over(partition by t.sub_name order by score desc nulls last) 名次
  from t_score t;

 查询结果:

 

学号 姓名 科目 成绩 名次
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
2 李四     数学 80.00 1
1 张三     数学 0.00 2
3 张三丰   数学
3
3 张三丰   体育 120.00 1
1 张三     语文 80.00 1
2 李四     语文 50.00 2
3 张三丰   语文 10.00 3

 

分享到:
评论

相关推荐

    peak-linux-driver-8.15.2.tar

    peak-linux-driver-8.15.2.tar

    VSCodeUserSetup-x64-1.86.1.exe

    VSCodeUserSetup-x64-1.86.1

    毕业设计使用ncnn在ios+android上部署yolov5源码+详细说明.zip

    高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip 高分毕业设计 毕业设计源码 使用ncnn在ios+android上部署yolov5源码+详细说明.zip

    课设毕设基于SSM的医院远程诊断系统-LW+PPT+源码可运行.zip

    课设毕设基于SSM的医院远程诊断系统--LW+PPT+源码可运行.

    node-v0.10.25-sunos-x86.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.10.24-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    matlab-简明实例教程详解

    matlab实用的例程详解可供学习与参考理解,MATLAB 已经受了用户的多年考验 在欧美发达国家 MATLAB 已经成为应用线性代数 自动控制理论 数理统计 数字信号处理 时间序列分析 动态系统仿真等高级课程的基本教学工具 成为攻读学位的大学生 硕士生 博士生必须掌握的基本技能 在设计研究单位和工业部门 MATLAB 被广泛地用于研究和解决各种具体工程问题。

    node-v0.10.26-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    javascript 中关于 this 的用法.zip

    javascript 中关于 this 的用法.zip

    【课程设计】基于python实现多AGV路径规划算法研究源码.zip

    【课程设计】基于python实现多AGV路径规划算法研究源码.zip

    【课程设计】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)源码.zip

    【课程设计】基于间接卡尔曼滤波的IMU与GPS融合MATLAB仿真(IMU与GPS数据由仿真生成)源码.zip

    静态网页比赛.zip

    静态网页比赛.zip

    【毕业设计】缺陷检测-基于深度学习实现的高效轮胎磨损+缺陷检测算法实现python源码.zip

    【毕业设计】缺陷检测-基于深度学习实现的高效轮胎磨损+缺陷检测算法实现python源码.zip

    springboot282基于web的机动车号牌管理系统.rar

    开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat11+ 开发软件:idea/eclipse(推荐idea)

    《软件设计与体系结构R》实验报告

    21级太原理工大学JACVAEE实验报告,各位当个参考即可,不用过分较真,如果与你们想法不同,请以自己为主,各位加油。

    node-v4.2.2-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Java与SNMP实现的网络设备MIB信息采集.zip

    运用java语言设计了一个针对TCP/IP网络的基于SNMP网络设备的MIB信息采集系统。 这个系统采用三层模型进行设计 最底层负责SNMP中基本对象编码、定义,与设备连接通信等; 中间层在底层的基础上定义了MIB对象,负责OID与MIB对象间的转换,分析MIB信息文件以生成MIB树型结构,单个MIB变量信息查询等功能 顶层,即界面层则在中间层的基础上实现了用户界面。

    QuarkCloudDrive.exe

    QuarkCloudDrive网盘

    node-v0.8.20-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics