Oracle中rank() over, dense_rank(), row_number() 的区别
Oracle中rank() over, dense_rank(), row_number() 的区别
假设现在有一张学生表student,学生表中有姓名、分数、课程编号,现在我需要按照课程对学生的成绩进行排序。
select * from student
1. rank over ()可以实现对学生排名,特点是成绩相同的两名是并列,如下1 2 2 4 5
select name,
course,
rank() over(partition by course order by score desc) as rank
from student;
2. dense_rank()和rank over()很像,但学生成绩并列后并不会空出并列所占的名次,如下1 2 2 3 4
select name,
course,
dense_rank() over(partition by course order by score desc) as rank
from student;
3. row_number这个函数不需要考虑是否并列,那怕根据条件查询出来的数值相同也会进行连续排名
select name,
course,
row_number() over(partition by course order by score desc) as rank
from student;
答疑:
1. partition by用于给结果集进行分区。
2. partition by和group by有何区别?
partition by只是将原始数据进行名次排列(记录数不变)
group by是对原始数据进行聚合统计(记录数可能变少, 每组返回一条)
3. 使用rank over()的时候,空值是最大的,如果排序字段为null, 可能造成null字段排在最前面,影响排序结果。
可以这样: rank over(partition by course order by score desc nulls last)
Oracle中rank() over, dense_rank(), row_number() 的区别相关推荐
- oracle数据库rank over用法,Oracle中rank() over, dense_rank(), row_number() 的区别
Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...
- rank() over,dense_rank(),row_number() 的区别
转自:https://jingyan.baidu.com/article/597035521ff2ec8fc107404b.html rank() over是的作用是查出指定条件后进行一个排名,但是有 ...
- oracle的int范围,oracle中int类型和number类型区别
oracle中int类型和number类型区别 INT类型是NUMBER类型的子类型. 下面简要说明: (1)NUMBER(P,S) 该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节 ...
- Oracle中Null与空字符串''的区别
http://read.newbooks.com.cn/info/172049.html Oracle中Null与空字符串''的区别 来源:CSDN 作者:jsjzzh 发布时间:2007-1 ...
- Oracle中用户和架构之间的区别?
本文翻译自:Difference between a user and a schema in Oracle? Oracle中的用户和架构有什么区别? #1楼 参考:https://stackoom. ...
- Oracle中sys和system用户的区别
Oracle中sys和system用户的区别 1.数据库的启动需要以SYSDBA/SYSOPER身份登录. 2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as ...
- Oracle中rank() over()函数排名
--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank 查询原始数据:学号.姓名.科目名.成绩 select ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
- oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别
Oracle中存储过程和函数的区别 存储过程和函数: www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...
最新文章
- 在有序数字中寻找和为k的两个数 O(n)
- 你在听音乐的时候能否感受到背后有“寒意“?
- 监控Spark应用方法简介
- 0-100之间的素数、判断素数的基本和优化方法
- stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
- 14. 最长公共前缀
- 中的ama格式_想发SCI?期刊引用格式选好了没?
- devtools的ctrl加r_Chrome DevTools调试技巧
- 计算机基础知识第八周,计算机系统基础(一):程序的表示、转换与链接(第八周小测验)...
- linux下安装TensorFlow(centos)
- python是什么课程-Python课程包括哪些内容?
- Good Bye 2016 //智商再次下线,边界爆炸.....
- MySQL 亿级数据分页的优化
- DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Tra
- 单片机 WIFI模块发送AT指令收不到回复问题
- 台式计算机m4350,高配商用台式 联想启天M4350跌破五千
- 价值博客们,技术博客
- centos7 yum 配置阿里云镜像
- C语言中的指针,指针存在的意义
- js如何获取元素内容
热门文章
- BLE 配对后通信其中一方LTK丢失情况(转自襄坤在线)
- 强化学习(四)—— Actor-Critic
- datename mysql_SQL日期时间函数总结(MSSQL)
- 个推通知栏修改_浙大一院五一劳动节放假通知!手机办住院手续!还有这些攻略不能错过!...
- Bitcoin 中的挖矿算法(6) 难度调整
- C++ Primer 5th笔记(chap 15 OOP)概述
- java面试题4(基础)
- Windows服务器版本简介
- git——远程库和本地库
- Sentinel圣天诺加密狗简单使用教程(Linux)