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之分析函数解析及其应用场景相关推荐

  1. oracle 内存结构 share pool sql解析的过程

    1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应 ...

  2. oracle索引 oracle索引结构 oracle索引使用 B*Tree索引

    在进行数据查询的时候如果碰到大量数据集中的少量数据查询问题,可以通过在查询字段上新增索引提高查询速度 如果查询的结果集是大批量数据,那么就没必要使用索引了. 索引结构 举个例子:表A 列 a, b, ...

  3. Oracle开发专题之:分析函数(OVER)

    目录: =============================================== 1.Oracle分析函数简介 2. Oracle分析函数简单实例 3.分析函数OVER解析 一. ...

  4. 【分析函数】Oracle分析函数之LAG和LEAD

    [分析函数]Oracle分析函数之LAG和LEAD Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值.这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的 ...

  5. oracle的集函数,Oracle统计分析函数集之一(转载)

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

  6. oracle 进入gdsctl,oracle的分析函数over 及开窗函数[转]

    一:分析函数over Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行. 下面通过几个例子来说 ...

  7. oracle 的lag,oracle分析函数lag

    这是使用分析函数的Oracle方法论. with data as ( SELECT 1 trip_id, to_date('20080801 13:30:00','YYYYMMDD HH24:mi:s ...

  8. oracle 分析函数视频教程,Oracle 分析函数使用教程(3)

    开窗条件query_partition_clause决定被除数的值, 如果用户忽略了这个条件, 则计算查询结果中所有记录的汇总值. 用户不能使用其他分析函数或者ratio_to_report作为分析函 ...

  9. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  10. Oracle内存结构详解(三)--管理Oracle Share Pool

    SGA中的共享池由库缓存(Library Cache).字典缓存(Dictionary Cache).用于并行执行消息的缓冲以及控制结构组成. Shared Pool的大小由参数SHARED_POOL ...

最新文章

  1. 使用openpyxl去操作Excel表格
  2. 全球及中国医药销售外包(CSO)产业营销创新模式市场格局分析报告2022版
  3. 里面怎么缓存图片_浏览器缓存原理总结
  4. SpringCloud(九):sidecar异构微服务
  5. android 回归测试,自动遍历回归测试工具
  6. python图片隐写_基于python的LSB隐写与分析
  7. 526个儿童游戏APP应用音效游戏声音集合音效素材 Kids Game Sound Effects
  8. 安卓原生系统_你没有用过的安卓系统:原生安卓桌面体验
  9. linux那些事儿 pdf,[转] linux那些事儿之我是HUB - PDF文件
  10. [工具] 小白如何修改解包打包system.img
  11. 杂记-2018.04.09
  12. 互联网夜高峰,无人应答
  13. php://filter伪协议(总结)
  14. 【虚幻引擎UE】UE5 简单实现范围计算并绘制圆圈
  15. 2019,flutter推流
  16. WV.16- 编程题AB-第二价格密封拍卖
  17. sqlserver broker远端端点证书认证
  18. 解决迅雷敏感资源无法下载问题
  19. 淘宝U站排名揭秘-看淘宝优站排名规则解析U站排名优化策略
  20. JavaScript 省市县三级联动

热门文章

  1. 拼音加加符号编码列表
  2. Ti的C28x系列的DSP(28069)使用经验,SCI与RS485(ADM2587EBRWZ)
  3. 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
  4. IPFS为什么被学者称为数据的“黄金保险柜”?
  5. LoadRunner视频教程地址
  6. XP系统时间同步和开启WindowsTime服务
  7. 【课程设计】俄罗斯方块游戏,重温经典(源码 + 详解)
  8. centos php ioncube_CentOS 7安装ionCube Loader为php解密组件的方法
  9. 51单片机自学笔记(一)——keil软件的使用
  10. os系统 测试网络软件,iStumbler For Mac v103.43 WiFi 信号强度检测工具 _ 黑苹果乐园...