介绍Oracle的开窗函数之前先介绍一下分析函数,因为开窗函数也属于分析函数

分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

上面是开窗函数的简单介绍。

开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化

oracle开窗函数有很多,用的比较多的是over(...),使用的话一般是和order、partition by、row_number()、rank()、dense_rank()几个函数一起使用

例子:成绩表的例子,

学号 姓名 班级 成绩
111 小王 2 92
123 小李 1 90
134 小钱 1 92
145 小顺 2 100

数据表为t_score,字段分别为stuId,stuName,classId ,score

create table t_score(
stuId varchar2(20),
stuName varchar2(50),
classId number,
score float
);
insert into t_score(stuId,stuName,classId,score) values('111','小王',1,92);
insert into t_score(stuId,stuName,classId,score) values('123','小李',1,90);
insert into t_score(stuId,stuName,classId,score) values('134','小钱',1,92);
insert into t_score(stuId,stuName,classId,score) values('145','小顺',1,100);

over函数和row_number一起使用:

开窗函数和row_number函数一起使用的话,就是返回一行,不过这里其实不适合用来统计,因为统计成绩的话,可以存在分数一样的两条数据,而row_number只返回一条数据。

select *
from (select stuId, stuName, classId,
row_number() over(partition by classId order by score desc) rn
from t_score)
where rn = 1;

over函数和rank一起使用:

rank函数功能也是排序,这里的话,假如有分数一样的两条数据的情况,如图sql是根据score排序的,有两人并列第二名,实际的第3名就被算成第4名了,如图,rn=4

 select stuId,
stuName,
classId,
rank() over(partition by classId order by score desc) rn
from t_score;



over函数和dense_rank一起使用:

dense_rank函数是rank函数的补充,假如有分数一样的两条数据,出现了两人并列第二名的情况,实际的第3名算的是正确的

select stuId,
stuName,
classId,
dense_rank() over(partition by classId order by score desc) rn
from t_score;

ok,这种是同班级的情况,对于不同班级的情况,修改数据

INSERT INTO t_score(stuId,stuName,classId,score) VALUES('111','小王',2,92);
INSERT INTO t_score(stuId,stuName,classId,score) VALUES('123','小李',1,90);
INSERT INTO t_score(stuId,stuName,classId,score) VALUES('134','小钱',1,92);
INSERT INTO t_score(stuId,stuName,classId,score) VALUES('145','小顺',2,100);



可以看出,对办件进行分组再按成绩排序,oracle的分析函数功能还是做得比较齐全的

Oracle开窗函数笔记及应用场景的更多相关文章

  1. Oracle开窗函数 over()(转)

    copy文链接:http://blog.csdn.net/yjjm1990/article/details/7524167#,http://www.2cto.com/database/201402/2 ...

  2. Oracle 开窗函数--转

    oracle的分析函数over 及开窗函数 转自:http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/一:分析函数ove ...

  3. Oracle常用函数笔记

    一.字符函数 1.dual 临时表 oracle中的临时变量表,此表只返回第一行第一列 例如:select sysdate from dual 输出:2014-6-9 11:20:39 2.Initc ...

  4. Oracle单行函数笔记

    Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...

  5. oracle 高级用法, DECODE 排序, OVER(PARTITION BY X ORDER BY Y DESC) 开窗函数

    场景 01 (IN 语句 排序 decode() 函数): 1,我们在查询中会经常使用这样的用法, select * from table_name t where t.id in (1, 3, 7, ...

  6. oracle的分析函数over 及开窗函数

    转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数   一:分析函数over   Oracle从8.1.6开 ...

  7. oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  8. oracle 分析函数和开窗函数

    最近遇到一个需求,将查询出的数据按照地区分组,随机取出每个区域的2条数据,这里用到了oracle的分析和开窗函数: 最终写出的sql如下: select * from (select region,r ...

  9. 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)

    http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...

随机推荐

  1. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

    在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...

  2. mRNA文库构建

    mRNA文库构建 Posted: 三月 27, 2017  Under: Transcriptomics  By Kai  no Comments RNA-seq测序方法 在测mRNA过程中,首先要去 ...

  3. SpringBoot跨域问题

    1.先来说说跨域原理: 跨域原理简单来说就是发起跨域请求的时候,浏览器会对请求域返回的响应信息检查HTTP头,如果Access-Control-Allow-Origin包含了自身域,则允许访问,否则报 ...

  4. C#替换文件中特定字符串,按照原来的编码格式保存

    private void button1_Click(object sender, EventArgs e) { var txt1 = "E:\\Temp\\local"; str ...

  5. mybatis中怎样使用having?

    1.dao层代码 List<ErgTipSimpleBo> queryListMore(@Param("typeId") Integer typeId,@Param(& ...

  6. 大面积project.pbxproj冲突问题解决

    在团队开发中,经常会有project.pbxproj的冲突出现. 所以我们添加过新的文件后,要及时的提交,养成好习惯.以免出问题. 但是总有一些时候忘记提交出现大面积的冲突,然后把==== <& ...

  7. sqlserver 分割字符串和调用

    传入某种规则拼接字符串获得数组(表) /*功能说明:传入字符串跟分割符('''SGHE00000003'',''SGHE00000004'',''SGHE00000005'''),返回一个Table* ...

  8. jmeter性能测试入门

    1.jmeter介绍2.jmeter变量环境部署3.jmeter目录结构4.jmeter  Gui模式5.jmeter 非Gui模式6.jmeter 录制完显示乱码设置7.jmeter 结果分析 1. ...

  9. C# MVC验证Model

    .NET Core MVC3 数据模型验证的使用 这里我先粘贴一个已经加了数据验证的实体类PeopleModel,然后一一介绍. using System; using System.Collecti ...

  10. Ubuntu18.04安装Guake下拉式终端

    Guake的优势是方便,可以很迅速的唤起与隐藏,已经成为我所需终端的主力. 安装方式:sudo apt-get install guake bug修复:使用时输入exit命令会导致终端卡死系统报错,同 ...