ORACLE数据库(六)-----开窗函数

开窗函数又名分析函数、窗口函数、OLAP(数据分析)函数

聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果

开窗函数:将数据按照一定的规则分组,统一分析各组的某项情况,每行数据返回一行结果

一、开窗函数语法

分析函数名() over(分析子句)

over作为开窗函数的标志

二、分析子句

分组(PARTITION BY) 排序(ORDER BY) 窗口(ROWS)

三、窗口条件

PRECEDING:之前的

FOLLOWING:之后的

CURRENT:当前的

UNBOUNDING:不受限的

ROW: 行

ROWS BETWEEN N PRECEDING AND N FOLLOWING -- 前面N行---- 后面N行

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- 第一行 - 当前行

ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -- 当前行 - 最后一行

ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING -- 第一行 - 最后一行

三、分析函数

1 聚合类

SUM()、AVG() 、MAX()、 MIN()、 COUNT() 功能和聚合函数一样

1 PARTITION BY 默认窗口的作用范围是从每个组的第一行到最后一行

2 ORDER BY 默认窗口作用范围是从第一条到当前条

3 ORDER BY 分组内部排序,尽可能的按照顺序排,但是结果不一定完全按照内部排序结果

用SUM()举例

SUM(列名) OVER([PARTITION] [ORDER] [ROWS])

--查询每天的营业额及周每日累计营业额

SELECT DATA_DT,AMT,SUM(AMT)OVER(PARTITION BY WEEK ORDER BY DATA_DT ASC) FROM BUSINESS; -- 各组内的第一条到当前条

注意点

1)分析函数名内必须包含需要分析的内容

2)分析子句没有硬性要求 --- 出现ROWS时必须伴随ORDER BY

3)采用默认窗口范围时,下一个N相同值(用来排序的值相同)会被一并算入

2 排序类

ROW_NUMBER:对于排序值相同的行 排名不并列也不跳跃

RANK:对排序值相同的行 排名并列并且跳跃

DENSE_RANK:对排序值相同的行 并列不跳跃

用法

ROW_NUMBER()OVER([PARTITION BY ] ORDER BY)

查询每天的营业额并在整月范围内升序排列

SELECT DATA_DT,AMT,ROW_NUMBER()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 不并列 不跳跃

SELECT DATA_DT,AMT,RANK()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 并列跳跃

SELECT DATA_DT,AMT,DENSE_RANK()OVER(ORDER BY AMT) RN FROM BUSINESS; -- 并列不跳跃

ROW_NUMBER 可以用来去除重复的行 完全重复和不完全重复(一般多条数据中除了日期不同其他均相同的行)

排序类开窗函数注意点:

1)分子函数名内不能包含任何内容

2)分析子句内必须添加ORDER BY,且不能指定窗口

3 偏移类

LAG() : 向前偏移

LEAD(): 向后偏移

用法

用法(以LAG为例):LAG(COL_NAME,[OFFSET],[DEFVAL])OVER():向前偏移N行取数

COL_NAME:要分析的字段

OFFSET:偏移量 --默认偏移一行

DEFVAL:默认返回值 --默认返回空null 返回的类型要与分析字段的类型一样

--查询每天的营业额以及前一天的营业额

SELECT DATA_DT,AMT,

LAG(AMT,1,0)OVER(ORDER BY DATA_DT)

FROM BUSINESS;

偏移类开窗函数注意点:

1)分析函数名内必须包含要分析的内容,其他两项参数可以默认

2)分析子句内必须添加ORDER BY,且不能指定窗口

3)若不再有可供偏移的行,则返回默认值

4)偏移量不允许写负数

5)默认返回值数据类型与分析的字段要保持一致

四、总结

1 窗口子句不能单独出现,必须要有排序子句出现的情况下才能指定窗口范围

2 若出现排序子句(ORDER BY),同时未指定窗口范围,默认的窗口范围是第一行到当前行;若未出现排序子句,同时未指定窗口范围,默认的窗口范围是第一行到最后一行

oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数相关推荐

  1. 数据库创建函数_达梦数据库创建UUID函数

    数据库创建函数_达梦数据库创建UUID函数 接触达梦数据库有一段时间了,整理了一些资料,今天分享一下达梦数据UUID自定义函数 UUID函数定义 很多数据库都有提供UUID函数,可是接触达梦数据库后, ...

  2. mysql数据库 常用函数_《MySQL数据库》常用函数整理

    原标题:<MySQL数据库>常用函数整理 以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数. 第一类:字符串函数 1.conv(n,from_base,to_base):对 ...

  3. mysql数据库的函数_详解数据库_MySQL: mysql函数

    一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...

  4. mysql存储函数if,详解数据库_MySQL: mysql函数

    一.内置函数 1.数学函数 rand() round(num) ceil(num) floor(num) 随机 四舍五入 向上取整 向下取整 2.字符串函数 length() 字节长度 char_le ...

  5. python中fetchall函数_python中查询数据库时fetchone()函数和fetchall()函数的区别

    我们在用python操作数据库的时候,经常会碰见两个函数:fetchone()和fetchall() 刚开始学习的时候可能会搞不清楚他们两个的区别 其实非常简单 首先fetchone()函数它的返回值 ...

  6. 编写分段函数子函数_我从编写六个函数中学到的全部都做相同的事情

    编写分段函数子函数 A couple weeks ago, a camper started an unofficial algorithm competition on Free Code Camp ...

  7. mysqlsql常用函数_《MySQL数据库》常用函数整理

    以下内容,是我整理出来的比较常用的字符串函数,数值函数,日期函数. 第一类:字符串函数 1.conv(n,from_base,to_base):对from_base进制的数n,转成to_base进制的 ...

  8. Oracle 数据库数据排名函数:rank() 和dense_rank() 。

    Oracle 数据库数据排名函数:  rank() 和dense_rank() . --------------------------------------------间断排名(也称强制排名)   ...

  9. Oracle数据库之单行函数

    oracle安装参照: Oracle数据库之安装教程 Oracel数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...

最新文章

  1. LeetCode简单题之两个相同字符之间的最长子字符串
  2. 图解IIS服务器配置教程(asp\php\mysql)
  3. 三年之久的 etcd3 数据不一致 bug 分析
  4. 安全策略_Spring Security 实战干货:如何实现不同的接口不同的安全策略
  5. SpringBoot中注入ApplicationContext对象的三种方式
  6. new 一个结构体数组_C语言结构体到底占多少内存?简单!一文助你解决结构体内存问题...
  7. 信号与线性系统分析(吴大正,郭宝龙)(2-冲激函数)
  8. 使用 Python 多处理库处理 3D 数据
  9. 如何评估开发费 (From 程序匠人)
  10. opencv中关于cvtColor函数性能测试
  11. 把视频转换成图片帧的代码
  12. POE指针式时钟系统自动追时精准校时
  13. 网站都变成灰色,一行代码就搞定了!
  14. 角度逼近圆弧插补法插补与仿真
  15. 计算机音乐历史,电子音乐的发展始于20世纪50年代,经历了三个发展阶段:具体音乐、()和计算机音乐。巴黎、()和米兰先 - 试题答案网问答...
  16. 斜体加粗昵称生成源码
  17. 【ICPC-369】uva 12096 The SetStack Computer
  18. 黑客攻击欧洲港口石油设施致油价飙升、上海首份《企业数据合规指引》出台、微软计划收购网络安全公司|网络安全周报
  19. 一些前端入门者可能需要的网站
  20. 【汇正财经】电网设备,享受改革的硕果

热门文章

  1. 计算平均指令时间_为什么向量化计算(vectorization)会这么快?
  2. php foreach 符号,关于php:php-foreach循环中变量之前的符号
  3. 群体智能,多个机器人协同搬运!
  4. java mp3数组_Java基础之数组(一)
  5. HLS中数据的合并与拆分
  6. 同步逻辑电路和异步逻辑电路
  7. 控制台怎么查看错误的详细信息_Java 程序该怎么优化?命令篇
  8. unity实现图片轮播效果_Unity3D实现列表拖拽轮播分页滚动功能
  9. 宝塔配置mysql host_阿里云安装宝塔以及mysql配置
  10. python init self_转载--------Python中:self和__init__的含义 + 为何要有self和__init__