ORACLE数据库(六)

您所在的位置:网站首页 oracle数据库表最大行数 ORACLE数据库(六)

ORACLE数据库(六)

#ORACLE数据库(六)| 来源: 网络整理| 查看: 265

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),同时未指定窗口范围,默认的窗口范围是第一行到当前行;若未出现排序子句,同时未指定窗口范围,默认的窗口范围是第一行到最后一行



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3