分析函数用于计算基于组的某种聚合值,每个组返回多个行,而聚合函数每个组只返回一个行

表:

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的更多相关文章

  1. ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

    ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...

  2. 问题:oracle ROW_NUMBER()over;结果: ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

    ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...

  3. SQL 常用的判断、连表、跨库、去重、分组、ROW_NUMBER()分析函数SQL用法

    常用的SQL 由浅入深 大致上回想一下自己常用的SQL,并做个记录,目标是实现可以通过在此页面查找到自己需要的SQL ,陆续补充    有不足之处,请提醒改正 首先我创建了两个库,每个库两张表.(工作 ...

  4. hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法

    hive中一般取top n时,row_number(),rank,dense_ran()这三个函数就派上用场了, 先简单说下这三函数都是排名的,不过呢还有点细微的区别. 通过代码运行结果一看就明白了. ...

  5. Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...

  6. [转]oracle分析函数Rank, Dense_rank, row_number

    oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 ==================== ...

  7. 【DB2】DB2中rank(),dense_rank(),row_number()的用法

    1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...

  8. Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...

  9. OVER 分析函数

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用. rank,dense_rank,row_numb ...

随机推荐

  1. Django之模型管理器filter处理问题

    今天上班第一天,恭祝所有朋友新年快乐!! 最近在github上发现一个还不错的基于Django的开源博客项目,不过也许是版本原因,其中代码存在着些许问题,今天主要记录下其中的模型处理方法的部分. 这段 ...

  2. [其他]Jboss容器开启调试模式

    1.登陆服务器: 2.找到$JBOSS_HOME/bin/run.conf 3.找到# Sample JPDA settings for remote socket debuging这项,并将说明下方 ...

  3. redis cluster中添加删除重分配节点例子

    redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢. 一,redis cluster命令行     //集群(cluster)  CLUSTER INFO 打 ...

  4. ural 1100. Final Standings(数据结构)

    1100. Final Standings Time limit: 1.0 secondMemory limit: 16 MB Old contest software uses bubble sor ...

  5. Framebuffer原理、使用、测试系列文章,非常好的资料,大家一起学习

    转载:http://blog.csdn.net/tju355/article/details/6881372 *一.FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核 ...

  6. 用SqlBulkCopy批量插入数据到SqlServer数据库表中

    首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...

  7. win10 Qt 调试器未设置

    安装win10后一直用vs调试,没有用qt调试,这次启动调试,发现提示调试器未设置. 解决办法: 需要重新安装wdk 10 https://developer.microsoft.com/zh-cn/ ...

  8. Mr.Jobs

    Mr.Jobs   by xue 最近的情绪很down,情商智商一直往下降 主要的原因是工作不好找.不是我的要求太高, 而是公司的HR都很不要. 当然首先得自我检讨,但是,damn,这种事情我怎么做的 ...

  9. 关于微信端不支持window.location.reload()

    今天写了一个调查问卷页面,项目经理说要表单提交之后页面刷新,之间没沟通清楚,以为整个页面重载,所以刚开始就用了window.location.reload()的方法. 但是发现,在微信直接打开之后,居 ...

  10. Java--最大子序列和实现

    package com.dongbin.test; /** * 最大子序列和 --分治法 * * @author dongbin * */ public class MaxSubListSum { / ...