oracle分析函数结构,oracle之分析函数解析及其应用场景
ORACLE 分析函数FIRST_VALUE,LAST_VALUE用法
sum over
avg over
first_value over
last_value over
...聚合函数结合over就是分析函数
备注LAST_VALUE一般这样操作:
【ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING / ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW】
3、列出每月的订单总额以及截至到当前月的订单总额
SQL> select month,
2 sum(tot_sales) month_sales,
3 sum(sum(tot_sales)) over(order by month
4 rows between unbounded preceding and current row) current_total_sales
5 from orders
6 group by month;
MONTH MONTH_SALES CURRENT_TOTAL_SALES
---------- ----------- -------------------
1 610697 610697
2 428676 1039373
3 637031 1676404
4 541146 2217550
5 592935 2810485
6 501485 3311970
7 606914 3918884
8 460520 4379404
9 392898 4772302
10 510117 5282419
11 532889 5815308
12 492458 6307766
SQL> select month,
2 sum(tot_sales) month_sales,
3 sum(sum(tot_sales)) over(order by month
4 rows between unbounded preceding and current row) current_total_sales,
5 sum(sum(tot_sales)) over(order by month
6 rows between unbounded preceding and unbounded following) total_sales
7 from orders
8 group by month;
MONTH MONTH_SALES CURRENT_TOTAL_SALES TOTAL_SALES
---------- ----------- ------------------- -----------
1 610697 610697 6307766
2 428676 1039373 6307766
3 637031 1676404 6307766
4 541146 2217550 6307766
5 592935 2810485 6307766
6 501485 3311970 6307766
7 606914 3918884 6307766
8 460520 4379404 6307766
9 392898 4772302 6307766
10 510117 5282419 6307766
11 532889 5815308 6307766
12 492458 6307766 6307766
4、统计当天销售额和五天内的评价销售额
select trunc(order_dt) day,
sum(sale_price) daily_sales,
avg(sum(sale_price)) over (order by trunc(order_dt)
range between interval '2' day preceding
and interval '2' day following) five_day_avg
from cust_order
where sale_price is not null
and order_dt between to_date('01-jul-2001','dd-mon-yyyy')
and to_date('31-jul-2001','dd-mon-yyyy')
为了对指定范围进行统计,Oracle使用关键字range、interval来指定一个范围。上面的例子告诉Oracle查找当前日期的前2天,后2天范围内的记录,并统计其销售平均值
5、Oracle提供了2个额外的函数:first_value、last_value,用于在窗口记录集中查找第一条记录和最后一条记录。假设我们的报表需要显示当前月、上一个月、后一个月的销售情况,以及每3个月的销售平均值,这两个函数就可以派上用场了
select month,
first_value(sum(tot_sales)) over (order by month
rows between 1 preceding and 1 following) prev_month,
sum(tot_sales) monthly_sales,
last_value(sum(tot_sales)) over (order by month
rows between 1 preceding and 1 following) next_month,
avg(sum(tot_sales)) over (order by month
rows between 1 preceding and 1 following) rolling_avg
from orders
where year = 2001
and region_id = 6
group by month
order by month;
首先我们来看:rows between 1 preceding and 1 following告诉Oracle在当前记录的前一条、后一条范围内查找并统计,而first_value和last_value在这3条记录中至分别找出第一条、第三条记录,这样我们就轻松地得到相邻三个月的销售记录及平均值了!
6、我们知道了如何利用窗口函数来显示相邻的记录,现在假如我们想每次显示当月的销售额和上个月的销售额,应该怎么做呢?
从第五点的介绍我们可以知道,利用first_value(sum(tot_sales) over (order by month rows between 1 preceding and 0 following))就可以做到了,其实Oracle还有一个更简单的方式让我们来比较2条记录,它就是lag函数。
leg函数类似于preceding和following
子句,它能够通过和当前记录的相对位置而被应用,在比较同一个相邻的记录集内两条相邻记录的时候特别有用。
select month,
sum(tot_sales) monthly_sales,
lag(sum(tot_sales), 1) over (order by month) prev_month_sales
from orders
where year = 2001
and region_id = 6
group by month
order by month;
*************************************************
1、over函数的写法:
over(partition by class order by sroce) 按照sroce排序进行累计,order by是个默认的开窗函数,按照class分区。
2、开窗的窗口范围:
over(order by sroce range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。
over(order by sroce rows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。
3、与over()函数结合的函数的介绍
(1)、查询每个班的第一名的成绩:如下
1 SELECT * FROM (select t.name,t.class,t.sroce,rank() over(partition by t.class order by t.sroce desc) mm from T2_TEMP t) where mm = 1;
*************************************************
分析函数应用场景:https://blog.csdn.net/WuLex/article/details/82796991
oracle分析函数结构,oracle之分析函数解析及其应用场景相关推荐
- oracle 内存结构 share pool sql解析的过程
1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应 ...
- oracle索引 oracle索引结构 oracle索引使用 B*Tree索引
在进行数据查询的时候如果碰到大量数据集中的少量数据查询问题,可以通过在查询字段上新增索引提高查询速度 如果查询的结果集是大批量数据,那么就没必要使用索引了. 索引结构 举个例子:表A 列 a, b, ...
- Oracle开发专题之:分析函数(OVER)
目录: =============================================== 1.Oracle分析函数简介 2. Oracle分析函数简单实例 3.分析函数OVER解析 一. ...
- 【分析函数】Oracle分析函数之LAG和LEAD
[分析函数]Oracle分析函数之LAG和LEAD Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的 ...
- oracle的集函数,Oracle统计分析函数集之一(转载)
分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返 ...
- oracle 进入gdsctl,oracle的分析函数over 及开窗函数[转]
一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行. 下面通过几个例子来说 ...
- oracle 的lag,oracle分析函数lag
这是使用分析函数的Oracle方法论. with data as ( SELECT 1 trip_id, to_date('20080801 13:30:00','YYYYMMDD HH24:mi:s ...
- oracle 分析函数视频教程,Oracle 分析函数使用教程(3)
开窗条件query_partition_clause决定被除数的值, 如果用户忽略了这个条件, 则计算查询结果中所有记录的汇总值. 用户不能使用其他分析函数或者ratio_to_report作为分析函 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- Oracle内存结构详解(三)--管理Oracle Share Pool
SGA中的共享池由库缓存(Library Cache).字典缓存(Dictionary Cache).用于并行执行消息的缓冲以及控制结构组成. Shared Pool的大小由参数SHARED_POOL ...
最新文章
- 使用openpyxl去操作Excel表格
- 全球及中国医药销售外包(CSO)产业营销创新模式市场格局分析报告2022版
- 里面怎么缓存图片_浏览器缓存原理总结
- SpringCloud(九):sidecar异构微服务
- android 回归测试,自动遍历回归测试工具
- python图片隐写_基于python的LSB隐写与分析
- 526个儿童游戏APP应用音效游戏声音集合音效素材 Kids Game Sound Effects
- 安卓原生系统_你没有用过的安卓系统:原生安卓桌面体验
- linux那些事儿 pdf,[转] linux那些事儿之我是HUB - PDF文件
- [工具] 小白如何修改解包打包system.img
- 杂记-2018.04.09
- 互联网夜高峰,无人应答
- php://filter伪协议(总结)
- 【虚幻引擎UE】UE5 简单实现范围计算并绘制圆圈
- 2019,flutter推流
- WV.16- 编程题AB-第二价格密封拍卖
- sqlserver broker远端端点证书认证
- 解决迅雷敏感资源无法下载问题
- 淘宝U站排名揭秘-看淘宝优站排名规则解析U站排名优化策略
- JavaScript 省市县三级联动
热门文章
- 拼音加加符号编码列表
- Ti的C28x系列的DSP(28069)使用经验,SCI与RS485(ADM2587EBRWZ)
- 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
- IPFS为什么被学者称为数据的“黄金保险柜”?
- LoadRunner视频教程地址
- XP系统时间同步和开启WindowsTime服务
- 【课程设计】俄罗斯方块游戏,重温经典(源码 + 详解)
- centos php ioncube_CentOS 7安装ionCube Loader为php解密组件的方法
- 51单片机自学笔记(一)——keil软件的使用
- os系统 测试网络软件,iStumbler For Mac v103.43 WiFi 信号强度检测工具 _ 黑苹果乐园...