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() 的区别相关推荐

  1. oracle数据库rank over用法,Oracle中rank() over, dense_rank(), row_number() 的区别

    Oracle中rank() over, dense_rank(), row_number() 的区别 假设现在有一张学生表student,学生表中有姓名.分数.课程编号,现在我需要按照课程对学生的成绩 ...

  2. rank() over,dense_rank(),row_number() 的区别

    转自:https://jingyan.baidu.com/article/597035521ff2ec8fc107404b.html rank() over是的作用是查出指定条件后进行一个排名,但是有 ...

  3. oracle的int范围,oracle中int类型和number类型区别

    oracle中int类型和number类型区别 INT类型是NUMBER类型的子类型. 下面简要说明: (1)NUMBER(P,S) 该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节 ...

  4. Oracle中Null与空字符串''的区别

    http://read.newbooks.com.cn/info/172049.html Oracle中Null与空字符串''的区别 来源:CSDN   作者:jsjzzh   发布时间:2007-1 ...

  5. Oracle中用户和架构之间的区别?

    本文翻译自:Difference between a user and a schema in Oracle? Oracle中的用户和架构有什么区别? #1楼 参考:https://stackoom. ...

  6. Oracle中sys和system用户的区别

    Oracle中sys和system用户的区别 1.数据库的启动需要以SYSDBA/SYSOPER身份登录. 2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as ...

  7. Oracle中rank() over()函数排名

    --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank 查询原始数据:学号.姓名.科目名.成绩 select ...

  8. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

  9. oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别

    Oracle中存储过程和函数的区别 存储过程和函数:  www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...

最新文章

  1. 在有序数字中寻找和为k的两个数 O(n)
  2. 你在听音乐的时候能否感受到背后有“寒意“?
  3. 监控Spark应用方法简介
  4. 0-100之间的素数、判断素数的基本和优化方法
  5. stanford-chinese-corenlp-yyyy-MM-dd-models.jar not exists解决
  6. 14. 最长公共前缀
  7. 中的ama格式_想发SCI?期刊引用格式选好了没?
  8. devtools的ctrl加r_Chrome DevTools调试技巧
  9. 计算机基础知识第八周,计算机系统基础(一):程序的表示、转换与链接(第八周小测验)...
  10. linux下安装TensorFlow(centos)
  11. python是什么课程-Python课程包括哪些内容?
  12. Good Bye 2016 //智商再次下线,边界爆炸.....
  13. MySQL 亿级数据分页的优化
  14. DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Tra
  15. 单片机 WIFI模块发送AT指令收不到回复问题
  16. 台式计算机m4350,高配商用台式 联想启天M4350跌破五千
  17. 价值博客们,技术博客
  18. centos7 yum 配置阿里云镜像
  19. C语言中的指针,指针存在的意义
  20. js如何获取元素内容

热门文章

  1. BLE 配对后通信其中一方LTK丢失情况(转自襄坤在线)
  2. 强化学习(四)—— Actor-Critic
  3. datename mysql_SQL日期时间函数总结(MSSQL)
  4. 个推通知栏修改_浙大一院五一劳动节放假通知!手机办住院手续!还有这些攻略不能错过!...
  5. Bitcoin 中的挖矿算法(6) 难度调整
  6. C++ Primer 5th笔记(chap 15 OOP)概述
  7. java面试题4(基础)
  8. Windows服务器版本简介
  9. git——远程库和本地库
  10. Sentinel圣天诺加密狗简单使用教程(Linux)