分析函数 over用法 之row_number() runk_number
分析函数用于计算基于组的某种聚合值,每个组返回多个行,而聚合函数每个组只返回一个行
表:
create table TB_SCORE
(
id NUMBER(10),
class VARCHAR2(10),
sname VARCHAR2(30),
score NUMBER(10)
)
插入数据代码如下
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (1, '数学', '学生1', 22);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (2, '数学', '学生1', 66);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (3, '英语', '学生1', 88);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (4, '英语', '学生1', 77);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (5, '英语', '学生1', 88);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (6, '数学', '学生1', 7);
insert into tb_score (ID, CLASS, SNAME, SCORE)
values (7, '数学', '学生1', 88);
执行:SELECT * FROM tb_score,结果如下

1.row_number()
row_number() over (partition by colume1 order by colume2 desc) as columename
注释:
可以用来分组排序:
这个主要是可用来获取rowid,普通的获取rowid 时,如果条件上的rowid不是从1开始取值,就会报错,因为rowid取值的时候每一次都是从一开始计数,所以会用分析函数获取,在这种情况下用分析函数,里面的colume1 必须是唯一的,不然会重复.
eg:
(1)按科目分组,再按成绩倒序
SELECT t.*, row_number()over (partition by t.class order by t.score desc) as 名次 FROM tb_score t
结果如下:

(2)取每门课前两名的成绩:
SELECT * FROM
(
SELECT t.*,
row_number() over(partition by t.class order by t.score desc) as 名次
FROM tb_score t
) t1
where t1.名次<3
结果如下:

(3)取每门课成绩前两名的平均值
SELECT avg(t1.score) ,t1.class FROM
(
SELECT t.class,t.score,
row_number() over(partition by t.class order by t.score desc) as 名次
FROM tb_score t
) t1
where t1.名次<3
group by t1.class
结果如下:

2:ranK(),dense_rank();
(1) rank
SELECT t.class,t.score,
rank() over(partition by t.class order by t.score desc) as 名次
FROM tb_score t
结果如下

(2)dense_rank
SELECT t.class,t.score,
rank() over(partition by t.class order by t.score desc) as 名次
FROM tb_score t
结果如下:

总结:
row_number() over 排序时,没有并列,rank() over和dense_rank() over 有并列
但是,rank() over是并列后跳过,而dense_rank()over是并列后连续
分析函数 over用法 之row_number() runk_number的更多相关文章
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...
- 问题:oracle ROW_NUMBER()over;结果: ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...
- SQL 常用的判断、连表、跨库、去重、分组、ROW_NUMBER()分析函数SQL用法
常用的SQL 由浅入深 大致上回想一下自己常用的SQL,并做个记录,目标是实现可以通过在此页面查找到自己需要的SQL ,陆续补充 有不足之处,请提醒改正 首先我创建了两个库,每个库两张表.(工作 ...
- hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法
hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派上用场了, 先简单说下这三函数都是排名的,不过呢还有点细微的区别. 通过代码运行结果一看就明白了. ...
- Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...
- [转]oracle分析函数Rank, Dense_rank, row_number
oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number) 目录 ==================== ...
- 【DB2】DB2中rank(),dense_rank(),row_number()的用法
1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...
- OVER 分析函数
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用. rank,dense_rank,row_numb ...
随机推荐
- tomcat + jenkins启动tomcat后打开jenkins页面提示404错误的解决方案
首先下载tomcat和jenkins,将下载的jenkins2.12 war放到tomcat的webapps文件夹下后执行/bin文件夹下的start启动后,打开http://localhost:80 ...
- MongoDB本地安装与启用(windows )
MongoDB的安装与MongoDB服务配置 Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了 ...
- Mysql索引基础
Mysql索引基础 基本概念: 索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录.索引是提高数据库性能的重要方式.索引创建在表上,是对数据库表中一列或多列的值进行排序的一种结构.可以提 ...
- hibernate主键generator属性介绍
increment(递增) 用于为long, short或者int类型生成唯一标识.只有在没有其他进程往同一张表中插入数据时才能使用. 在集群下不要使用. identity (标识)对DB2,MySQ ...
- javascript DOM对象(1)
0.文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法. DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 将HTML代码分解为D ...
- 安装openblas和matcaffe时遇到的问题
1.在安装openblas时,报错:/usr/bin/ld: cannot find -lgfortran 这里是需要安装的是libgfortran-x.x-dev,“x.x”是版本名.使用sudo ...
- ArcGIS导出辖区边界点坐标
1.使用ArcGIS打开.mxd地图文件 2.选择[Geoprocessing][ArcToolbox] 3.展开菜单,选中如图所示菜单,双击打开 4.选择对应的辖区节点 5.点击OK后,会在左 ...
- linux下安装php的oracle拓展
最近要用Php远程连接第三方的oracle数据库,安装oracle拓展搞了好久,终于弄出来了,现在分享出来: 1,注意安装的客户端版本要和服务端的版本一致,不然会有异常 2,安装之前先要下载三个软件: ...
- Java中的Math类的简单实用
System.out.println(Math.PI);//获取PI的值 System.out.println(Math.E);//常量E int min = Math.min(5, 4);//求最小 ...
- iOS开发怎么样做第三方登陆(友盟社会化分享)
基于前一篇文章 自定义UI后 实现如下代码 即可 //第三方登陆 // UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformMa ...