oracle中查询实现以下结果,如何在Oracle中为查询结果分配等级?
问题陈述:
您想要分配一个数字/等级来表示其在结果中的位置。
解:
Oracle提供了RANK分析功能,可以为结果集中的行生成排名号。为了说明这一点,我们将从收费的高低开始对学生进行排名。以下SELECT语句使用rank函数分配这些值。
示例SELECT student_id,
first_name,
last_name,
fees,
RANK() OVER (ORDER BY fees DESC) AS rnk
FROM students;
输出结果学生卡名字姓费用nk
100史密斯詹姆士240001
101约翰逊约翰170002
102威廉斯罗伯特170002
108罗德里格斯约瑟夫120084
103棕色迈克尔90005
109威尔逊托马斯90005
110马丁尼兹克里斯托弗82007
112泰勒保罗78008
111安德森丹尼尔77009
113托马斯标记690010
104琼斯威廉600011
105磨坊主大卫480012
106戴维斯理查德480012
107加西亚查尔斯420014
RANK的行为与任何其他分析功能相似,一旦非分析处理完成,将对结果集进行第二遍操作。在上述SQL中,结果按费用降序处理,并从1开始计算结果的等级值。
一对费用相似的学生12008年的排名为4。这被称为稀疏排名,其中相同的值排名相同。根据您的要求,这可能不是理想的结果,因为缺少几个职级。
稀疏排名的另一种方法称为密集排名。我们将使用density_rank函数观察结果。
示例SELECT student_id,
first_name,
last_name,
fees,
dense_rank() OVER (ORDER BY fees DESC) AS rnk
FROM students
输出结果学生卡名字姓费用nk
100史密斯詹姆士240001
101约翰逊约翰170002
102威廉斯罗伯特170002
108罗德里格斯约瑟夫120083
103棕色迈克尔90004
109威尔逊托马斯90004
110马丁尼兹克里斯托弗82005
112泰勒保罗78006
111安德森丹尼尔77007
113托马斯标记69008
104琼斯威廉60009
105磨坊主大卫480010
106戴维斯理查德480010
107加西亚查尔斯420011
现在,我们可以看到缺少的连续等级值。
数据准备:用于该问题的数据如下所示。
示例DROP TABLE students;
COMMIT;
CREATE TABLE students
( student_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
, email VARCHAR2(40)
, phone_number VARCHAR2(20)
, join_date DATE
, class_id VARCHAR2(20)
, fees NUMBER(8,2)
, professor_id NUMBER(6)
, department_id NUMBER(4)
) ;
示例CREATE UNIQUE INDEX stu_id_pk ON students (student_id) ;
INSERT INTO students VALUES (100,'SMITH','JAMES','SMITH.JAMES@notreal.com','111.111.1245',TO_DATE('17-06-2003','DD-MM-YYYY'),'INS_CHAIRMAN',24000,NULL,NULL);
INSERT INTO students VALUES (101,'JOHNSON','JOHN','JOHNSON.JOHN@notreal.com','111.111.1246',TO_DATE('21-09-2005','DD-MM-YYYY'),'INS_VP',17000,100,90);
INSERT INTO students VALUES (102,'WILLIAMS','ROBERT','WILLIAMS.ROBERT@notreal.com','111.111.1247',TO_DATE('13-01-2001','DD-MM-YYYY'),'INS_VP',17000,100,90);
INSERT INTO students VALUES (103,'BROWN','MICHAEL','BROWN.MICHAEL@notreal.com','111.111.1248',TO_DATE('03-01-2006','DD-MM-YYYY'),'INS_STAFF',9000,102,60);
INSERT INTO students VALUES (104,'JONES','WILLIAM','JONES.WILLIAM@notreal.com','111.111.1249',TO_DATE('21-05-2007','DD-MM-YYYY'),'INS_STAFF',6000,103,60);
INSERT INTO students VALUES (105,'MILLER','DAVID','MILLER.DAVID@notreal.com','111.111.1250',TO_DATE('25-06-2005','DD-MM-YYYY'),'INS_STAFF',4800,103,60);
INSERT INTO students VALUES (106,'DAVIS','RICHARD','DAVIS.RICHARD@notreal.com','111.111.1251',TO_DATE('05-02-2006','DD-MM-YYYY'),'INS_STAFF',4800,103,60);
INSERT INTO students VALUES (107,'GARCIA','CHARLES','GARCIA.CHARLES@notreal.com','111.111.1252',TO_DATE('07-02-2007','DD-MM-YYYY'),'INS_STAFF',4200,103,60);
INSERT INTO students VALUES (108,'RODRIGUEZ','JOSEPH','RODRIGUEZ.JOSEPH@notreal.com','111.111.1253',TO_DATE('17-08-2002','DD-MM-YYYY'),'CL_PHY',12008,101,100);
INSERT INTO students VALUES (109,'WILSON','THOMAS','WILSON.THOMAS@notreal.com','111.111.1254',TO_DATE('16-08-2002','DD-MM-YYYY'),'CL_MATH',9000,108,100);
INSERT INTO students VALUES (110,'MARTINEZ','CHRISTOPHER','MARTINEZ.CHRISTOPHER@notreal.com','111.111.1255',TO_DATE('28-09-2005','DD-MM-YYYY'),'CL_MATH',8200,108,100);
INSERT INTO students VALUES (111,'ANDERSON','DANIEL','ANDERSON.DANIEL@notreal.com','111.111.1256',TO_DATE('30-09-2005','DD-MM-YYYY'),'CL_MATH',7700,108,100);
INSERT INTO students VALUES (112,'TAYLOR','PAUL','TAYLOR.PAUL@notreal.com','111.111.1257',TO_DATE('07-03-2006','DD-MM-YYYY'),'CL_MATH',7800,108,100);
INSERT INTO students VALUES (113,'THOMAS','MARK','THOMAS.MARK@notreal.com','111.111.1258',TO_DATE('07-12-2007','DD-MM-YYYY'),'CL_MATH',6900,108,100);
COMMIT;
oracle中查询实现以下结果,如何在Oracle中为查询结果分配等级?相关推荐
- html中写自增数字,WPS word中数字怎么自增 如何在word中设置数字的千位分隔符
选中某行,列或者某一部分,选择菜单栏的"行和列"->"填充"选项,选择序列选项. 在弹出的窗口中设置你需要的选项. WPS文字怎样自动增加数字 如何在WP ...
- oracle竖线分隔符文件导入6,如何在sqlldr中倒入多字符分隔符文件
如何在sqlldr中倒入多字符分隔符文件 今天有朋友询问: 我们...应用系统很多,它们之间要交换很多数据,目前是以文本方式交换,问题是文本的分隔符号是(|+|),为三个字符,主要是避免数据的混淆.. ...
- python中列表长度查询,从零开始学Python|如何在Python中查找列表的长度?
Python中的列表是有序且可更改的集合数据类型.列表也可以有重复的条目.所述的PythonLEN()方法被用于找到任何对象的长度.在本文中,我们将按以下顺序学习如何在python中查找列表的长度: ...
- shell中竖线的作用_如何在 Linux 中安装、配置和使用 Fish Shell?
每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? -- Ma ...
- html中看到php代码_如何在HTML中嵌入PHP代码
如何在HTML中嵌入PHP代码 对于一个有经验的 PHP Web 开发者,在HTML中嵌入PHP代码是一件非常容易的事情.但是对于刚开始接触 PHP 编程语言的新手这就是一个问题.下面是小编为大家带来 ...
- 在dw中如何调试html代码,如何在 Dreamweaver 中优化和调试代码 - Dreamweaver 用户指南...
了解如何在 Dreamweaver 中清除代码.检查浏览器兼容性.验证 XML 文档并使页面符合 XHTML 规范. 清理代码 您可以自动删除空标签,合并嵌套 font 标签,以及通过其它方法改善杂乱 ...
- ai中如何插入签名_如何在PDF中插入一个或多个空白页?
在编辑或修改PDF文档时,一般都需要新增空白页后再添加文本或图片等内容,那么如何在PDF中插入一个或多个空白页呢? 首先打开极速PDF编辑器,或打开需要编辑的PDF文档后,点击右上角"文档& ...
- eval在python中是什么意思_如何在Python中使用eval ?
Python中的 eval是什么? 在Python中,我们有许多内置方法,这些方法对于使Python成为所有人的便捷语言至关重要,而eval是其中一种.eval函数的语法如下: eval(expres ...
- python中while语句是_如何在Python中使用while语句[适合初学者]
while语句是重复循环的语句,那么如何用Python编写,下面Gxl网就带领大家来学习一下Python中使用while语句.[推荐阅读:Python视频教程] 一:什么是while语句?Python ...
- thinkphp中如何使用PHP函数,如何在ThinkPHP中使用函数进行回调
如何在ThinkPHP中使用函数进行回调 发布时间:2020-12-23 15:11:45 来源:亿速云 阅读:85 作者:Leah 本篇文章为大家展示了如何在ThinkPHP中使用函数进行回调,内容 ...
最新文章
- 【Caffe实践】基于Caffe的人脸识别实现
- ubuntu 挂载新硬盘
- 【DP优化】【P1430】序列取数
- _Linux实操-实用指令
- Frobenius norm(Frobenius 范数)
- 华为内部存储转sd卡_华为tit al00怎么将手机存储内容转移到sd卡
- 【Vue】父子组件的传值(父组件-->子组件、子组件-->父组件)
- DOS下常用命令大集合
- 走全渠道电商O2O模式的优势体现在哪些地方?
- mov和mp4格式哪个好_公文需带附件时,标准的格式排布
- 凤姐的原创诗歌 思想的悲哀
- [教程] 如何复活一个完全死机的联发科设备
- opencv中 idft与 mathlab中 ifft2结果不对应的解决方案
- 微信 php 地图定位,微信公众号定位地图位置写入数据库,再显示地图的方法
- 点云分割训练哪家强?监督,弱监督,无监督还是半监督?
- Upload labs
- drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系
- 使用百度网盘上传大文件到云服务器
- 滴水逆向学习总结第二期
- 动态规划——钢管切割最小代价问题