创建测试表:

create table Grades
(Sid varchar2(10),Cid varchar2(10),Fraction number(8,3)
);
insert into Grades values('01' , '01' , 80);
insert into Grades values('01' , '02' , 90);
insert into Grades values('01' , '03' , 99);
insert into Grades values('02' , '01' , 70);
insert into Grades values('02' , '02' , 60);
insert into Grades values('02' , '03' , 80);
insert into Grades values('03' , '01' , 80);
insert into Grades values('03' , '02' , 80);
insert into Grades values('03' , '03' , 80);
insert into Grades values('04' , '01' , 50);
insert into Grades values('04' , '02' , 30);
insert into Grades values('04' , '03' , 20);
insert into Grades values('05' , '01' , 76);
insert into Grades values('05' , '02' , 87);
insert into Grades values('06' , '01' , 31);
insert into Grades values('06' , '03' , 34);
insert into Grades values('07' , '02' , 89);
insert into Grades values('07' , '03' , 98);

1、row_number函数:

它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。

select g.*,row_number() over(partition by g.cid order by g.fraction desc)
as 排名 from grades g;--其中partition by是为了分组

2、rank()函数:

与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加1,rank()函数会跳号,遇到相同值,排序不连续

select g.*,rank() over(partition by g.cid order by g.fraction desc)
as 排名 from grades g;

3、dense_rank()函数:

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第三名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。

select g.*,dense_rank() over(partition by g.cid order by g.fraction desc)
as 排名 from grades g;

Oracle的排序函数相关推荐

  1. oracle 条件排序函数,oracle中分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  2. Oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况: 1.要求取出按field1分组后,并在每组中按照field2排序: 2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  3. Oracle 分组排序函数详解 (row_number、rank、dense_rank)

    文章目录 1 概述 2 分类 2.1 排序函数 2.2 分组子句 1 概述 1. 完整格式(1) row_number() over(partition by 列1 order by 列2) 2. 三 ...

  4. oracle求和分组排序,oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  5. Oracle中的排序和排序函数的使用

    参考地址:https://www.cnblogs.com/qiuting/p/7880500.html 前排提示,下面的实例用到的hr.employees表是Oracle11g的orcl实例自带的表空 ...

  6. 先随机后排序的oracle,Oracle用decode函数或CASE-WHEN实现自定义排序

    Oracle用decode函数或CASE-WHEN实现自定义排序 1 问题 对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序.但排序规则是默认的,数字 ...

  7. oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  8. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  9. list对oracle结果集排序了_详解SQL窗口函数和分组排序函数

    Mysql从8.0版本开始,也和Sql Server.Oracle一样支持在查询中使用窗口函数,本文将根据官方文档,通过实例介绍窗口函数并举例分组排序函数的使用. 英语好的大佬请移步官方文档~点我! ...

最新文章

  1. OkHttp3 HTTP请求执行流程分析
  2. 地理生物高考成绩查询2021,2021北京中考地理生物成绩查询时间【已公布】
  3. mocha 测试 mysql_node项目mocha自动化测试的疑问
  4. Hangfire入门(任务调度)
  5. php后端文件,【后端开发】php文件用啥打开
  6. informantion_schema库介绍
  7. 团队开发时该如何同步数据库变更到本地
  8. 洛谷 P4392 Sound 静音问题
  9. 中国人工智能趋势报告(完整版)
  10. 【尚硅谷】JavaWeb
  11. NIO 网络编程之群聊系统
  12. 【MODBUS】组态王通过串口与MODBUS RTU设备通讯
  13. ggradar画雷达图
  14. java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口
  15. 大数据之VMware和centos7安装
  16. 02.windows转mac日记——操作习惯
  17. Exchange绝妙使用-日历、邮件、通讯录双向同步
  18. 抽屉原理与Simhash
  19. Innosetup打包脚本常用设置大全
  20. 在R语言中进行缺失值填充:估算缺失值

热门文章

  1. excel中单元格中同时显示日期和星期,填充句柄填充
  2. 手把手教你定制一款专属的微信夸夸机器人
  3. 区块链与大数据,打造智能经济
  4. Flink系列之:Java代码实现深入浅出的理解Flink算子的使用方法
  5. 高德/百度经纬度转换
  6. 赚钱的A面B面,有钱人跟我们想的根本不一样
  7. Java遍历Set集合方法
  8. 2019 蓝桥杯省赛 A 组模拟赛(一)-忽明忽暗
  9. python开发用什么编程软件,五款不同阶段使用的IDE
  10. 第二课 工厂模式和原型模式