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

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

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程的主要优势。     PL/SQL Developer v8.0主要特性: PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。 集成调试器(要求Oracle 7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何程序单元(包括触发器和Oracle8 对象类型),无需作出任何修改。 PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模工作团队的协作。 SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器提供了同PL/SQL编辑器相同的强大特性。 命令窗口——使用PL/SQL Developer 的命令窗口能够开发并运行SQL脚本。该窗口具有同SQL*Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本/转换为SQL*Plus/运行脚本过程,也不用离开PL/SQL Developer集成开发环境。 报告——PL/SQL Developer提供内置的报告功能,您可以根据程序数据或Oracle字典运行报告。PL/SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件,进而包含在报告菜单内。这样,运行您自己经常使用的自定义报告就非常方便。 您可以使用Query Reporter免费软件工具来运行您的报告,不需要PL/SQL Developer,直接从命令行运行即可。 工程——PL/SQL Developer内置的工程概念可以用来组织您的工作。一个工程包括源文件集合、数据库对象、notes和选项。PL/SQL Developer允许您在某些特定的条目集合范围之内进行工作,而不是在完全的数据库或架构之内。这样,如果需要编译所有工程条目或者将工程从某个位置或数据库移动到其他位置时,所需工程条目的查找就变得比较简单, To-Do条目——您可以在任何SQL或PL/SQL源文件使用To-Do条目快速记录该文件那些需要进行的事项。以后能够从To-Do列表访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览数据、在对象源进行文本查找、拖放对象名到编辑器等。 此外,该对象浏览器还可以显示对象之间的依存关系,您可以递归的扩展这些依存对象(如包参考检查、浏览参考表格、图表类型等)。 性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL Developer工作环境,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。 非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其,PL/SQL Developer就将生成相应的SQL,从而创建或转换对象。 模板列表——PL/SQL Developer的模板列表可用作一个实时的帮助组件,协助您强制实现标准化。只要点击相应的模板,您就可以向编辑器插入标准的SQL或PL/SQL代码,或者从草稿出发来创建一个新程序。 查询构建器——图形化查询构建器简化了新选择语句的创建和已有语句的修改过程。只要拖放表格和视窗,为区域列表选择专栏,基于外部键约束定义联合表格即可。 比较用户对象——对表格定义、视图、程序单元等作出修改后,将这些修改传递给其他数据库用户或检查修改前后的区别将是非常有用的。这也许是一个其他的开发环境,如测试环境或制作环境等。而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象——该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建对象,也可以保存文件作为备份。 工具——PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找数据库文本、导入或导出表格、生成测试数据、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话信息等。 授权——大多数开发环境,您不希望所有数据库都具备PL/SQL Developer的全部功能性。例如,数据库开发您可以允许PL/SQL Developer的全部功能性,而数据库测试您可以仅允许数据查询/编辑和对象浏览功能,而数据库制作您甚至根本不希望PL/SQL Developer访问。利用PL/SQL Developer授权功能,您可以方便的定义特定用户或规则所允许使用的功能。 插件扩展——可以通过插件对PL/SQL Developer功能进行扩展。Add-ons页面提供插件可以免费下载。Allround Automations或其他用户均可提供插件(如版本控制插件或plsqldoc插件)。如果您具备创建DLL的编程语言,您还可以自己编写插件。 多线程IDE——PL/SQL Developer是一个多线程IDE。这样,当SQL查询、PL/SQL程序、调试会话等正在运行时,您依然可以继续工作。而且,该多线程IDE还意味着出现编程错误时不会止:您在任何时间都可以断执行或保存您的工作。 易于安装——不同于SQL*Net,无需间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用软件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dmy20210205

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值