1.   over(partition by t.class) 这里是通过class分区,分别统计每个班的总分,并且每条数据都会呈现

SELECT t.*, sum(t.SCORE) over(partition by t.class)  cnt   from T_SCORE t ORDER BY t.ID

2.   over(partition by t.class order by  id) 这里是通过班级分区,按id的顺序分别统计每个班的总分(累计加和),并且每条数据都会呈现

SELECT t.*, sum(t.SCORE) over(partition by t.class ORDER BY t.id)  cnt from T_SCORE t ORDER BY t.ID

3.   row_number()over()、rank()over()和dense_rank()over()函数的使用

1)rank()over()是跳跃性排名

SELECT * from (select t.name,t.class,t.course ,t.score, rank() over(partition by t.course,t.class order by t.score desc) mm from t_score t) where mm=1 order by class,course

这段sql是取每个班级每门学科的第一名

SELECT * from (select t.name,t.class,t.course ,t.score, rank() over(partition by t.course order by t.score desc) mm from t_score t)  order by course

这段sql是取每门学科的排名,可以看到有数学有两个第一名

2)dense_rank()over() 是连续排名

SELECT * from (select t.name,t.class,t.course ,t.score, DENSE_RANK() over(partition by t.course order by t.score desc) mm from t_score t)  order by course

3)row_number()over()   在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果;

SELECT * from (select t.name,t.class,t.course ,t.score, ROW_NUMBER() over(partition by t.course order by t.score desc) mm from t_score t)  order by course

4. 开窗函数的范围

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

开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1:over后的写法:    
   over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
   over(partition by deptno)按照部门分区

over(partition by deptno order by salary)

2:开窗的窗口范围:
over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。

举例:

--sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和

select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2
adf        3        45        45  --45加2减2即43到47,但是s在这个范围内只有45
asdf       3        55        55
cfe        2        74        74
3dd        3        78        158 --78在76到80范围内有78,80,求和得158
fda        1        80        158
gds        2        92        92
ffd        1        95        190
dss        1        95        190
ddd        3        99        198

gf         3        99        198

over(order by salary rows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。

举例:

--sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内
select name,class,s, sum(s)over(order by s rows between 2 preceding and 2 following) mm from t2
adf        3        45        174  (45+55+74=174)
asdf       3        55        252   (45+55+74+78=252)
cfe        2        74        332    (74+55+45+78+80=332)
3dd        3        78        379    (78+74+55+80+92=379)
fda        1        80        419
gds        2        92        440
ffd        1        95        461
dss        1        95        480
ddd        3        99        388
gf         3        99        293

over(order by salary range between unbounded preceding and unbounded following)或者

over(order by salary rows between unbounded preceding and unbounded following):窗口不做限制

oracle over() 函数使用相关推荐

  1. Oracle round函数是什么意思?怎么运用?

    如何使用 Oracle Round 函数 (四舍五入) 描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果. SELECT ROUND( number, [ decimal_p ...

  2. oracle 四分位函数,Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…

    Oracle 分析函数--函数RANK,DENSE_RANK,FIRST,LAST- RANK 功能描述:根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置.组内 ...

  3. oracle+cast函数+长度,oracle cast() 函数问题

    oracle cast() 函数问题 关键字: oracle cast() 函数问题 SQL> create table t1(a varchar(10)); Table created. SQ ...

  4. Oracle trunc()函数的用法

    --Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual  --20 ...

  5. oracle显示当天日期函数,oracle日期函数

    oracle日期函数 1.日期时间间隔操作  当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual 当 ...

  6. ORACLE时间函数(SYSDATE)深入理解

    ORACLE时间函数(SYSDATE)深入理解 加法  select sysdate,add_months(sysdate,12) from dual; --加1年  select sysdate,a ...

  7. 十、oracle 常用函数

    一.字符函数 字符函数是oracle中最常用的函数,我们来看看有哪些字符函数: lower(char):将字符串转化为小写的格式. upper(char):将字符串转化为大写的格式. length(c ...

  8. 【转】【CUBE】Oracle分组函数之CUBE魅力

    [转][CUBE]Oracle分组函数之CUBE魅力 http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是 ...

  9. oracle空格转换函数,ORACLE TO_CHAR函数格式化数字的出现空格的缘故

    ORACLE TO_CHAR函数格式化数字的出现空格的原因 在这篇博客SQL挑战--如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字 ...

  10. oracle 获得月最后一天,oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...

    select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_cha ...

最新文章

  1. linux网络命名空间详解,『中级篇』 Linux网络命名空间(25)
  2. python 贴吧自动回复机-python借助wxpy与图灵实现微信机器人自动回复消息
  3. 利用源代码包搭建LAMP
  4. go test 如何输出到控制台_GO笔记之GO命令快速体验
  5. 服务器之select
  6. 重磅!英特尔终于挤出10nm芯片 六大技术战略,震动芯片届
  7. 信息学奥赛一本通 1414:【17NOIP普及组】成绩 | 洛谷 P3954 [NOIP2017 普及组] 成绩
  8. 麦森数(洛谷-P1045)
  9. linux内存利用率多少合适,如何理解linux服务器中的内存使用率和平均负载
  10. Linux BPF hello world C语言示例代码
  11. 如何在Linux中使用ulimit命令
  12. 设置导出目录oracle11g,Oracle11g不同目录的冷备份解决方案
  13. 大功率MOS管选型手册及可申请样品-KIA MOS管
  14. 利用扭力仪来检测特小公斤数电批输出扭矩
  15. Oracle中文乱码(中文变问号?)解决方法---简单粗暴高效
  16. web端内嵌二维码进行微信登陆
  17. 如何使用机器学习在一个非常小的数据集上做出预测
  18. PE格式之千里追踪输入表
  19. android so 签名校验,Android-NDK-之so文件签名校验
  20. 奥赛 兔子繁殖 c语言,兔子繁殖问题(斐波拉契)

热门文章

  1. ubuntu——火狐浏览器报错:代理服务器拒绝连接
  2. CentOS服务器相关教程
  3. Pqmagic的使用方法
  4. EDW项目中ODS源接口表清单维护方案
  5. python可以调用c语言吗_python 调用c语言详解
  6. 【电子取证篇】电子数据鉴定基本原则
  7. linux中chgrp参数,技术|chgrp 和 newgrp 命令简介
  8. Vue移动端框架的选择
  9. Java基础之Set
  10. RAII技术与智能指针(超详细)