oracle 利用窗口函数计算合计、上月、下月及累计值等

原创 2012年03月28日 14:06:09

数据准备:

     create table TEST_GROUP_TABLE
(
  t_year   NUMBER,
  t_month  NUMBER,
  quantity NUMBER
);

 insert into test_group_table values(2012,1,29);

       insert into test_group_table values(2012,1,39);

       insert into test_group_table values(2012,2,11);

       insert into test_group_table values(2012,3,12);

       insert into test_group_table values(2013,1,10);

       insert into test_group_table values(2013,2,20);

       insert into test_group_table values(2013,3,30);

       insert into test_group_table values(2013,4,40);

--根据年份分组计算最小(大)数量及及最小(大)数量的月份

select t.t_year,

               t.t_month,
               sum(quantity) qty,
               first_value(sum(quantity)) over(partition by t_year order by sum(quantity)) min_qty,
               first_value(t_month) over(partition by t_year order by sum(quantity)) min_month,
               first_value(sum(quantity)) over(partition by t_year order by sum(quantity) desc) max_qty,
               first_value(t_month) over(partition by t_year order by sum(quantity) desc) max_month,
               rank() over(partition by t_year order by sum(quantity) desc) rank_1
          from test_group_table t
         group by t.t_year, t.t_month;

--根据年份分组计算当月合计数量,上月合计数量,下月合计数量
select t.t_year,
       t.t_month,
       sum(quantity) curr_month,
       lag(sum(quantity)) over(partition by t_year order by t_month) last_month,
       lead(sum(quantity)) over(partition by t_year order by t_month) next_month
  from test_group_table t
 group by t.t_year, t.t_month;

--根据年份分组,计算前n月至当月的合计数量
select t.t_year,
       t.t_month,
       sum(quantity),
       sum(sum(quantity)) over(partition by t_year order by t_month rows between unbounded preceding and current row) agg_qty
  from test_group_table t

 group by t.t_year, t.t_month;

--根据年份分组,计算上月、当月和下月的合计数量

select t.t_year,
       t.t_month,
       sum(quantity),
       sum(sum(quantity)) over(partition by t_year order by t_month rows between 1 preceding and 1 following) agg_qty
  from test_group_table t
 group by t.t_year, t.t_month;

hive之窗口函数理解与实践

rt_data表存放了当天每半小时的店铺销售数据 ------------------------------------------------------------ 1.统计截止到当前时间段的店...
  • xiepeifeng
  • xiepeifeng
  • 2015年01月13日 14:58
  • 19239

oracle分析函数系列之ratio_to_report:计算占总数百分比

数据库如何用Oracle RATIO_TO_REPORT计算总数百分比 除报告详细数据外,许多报告中还包括每行总数的百分比。例如,每名客户的订单相对于总订单的百分比,或每位销售代表的销售额相对于...
  • rfb0204421
  • rfb0204421
  • 2012年06月19日 11:39
  • 11945

oracle 统计当年和当月数据

------年度 select fa31.AFR042 AFR042,                        fa31.uus005 uus005,                  ...
  • u011592166
  • u011592166
  • 2017年01月09日 10:45
  • 370

ORACLE逐行累计求和方法(OVER函数)

sql over的作用及用法 1.RANK ( ) OVER ( [query_partition_clause] order_by_clause ) DENSE_RANK ( ) OVER ( ...
  • zengwenjie123
  • zengwenjie123
  • 2016年10月23日 00:51
  • 9339

Oracle 学习之窗口函数(over)

在工作的过程中,我们有时候需要编写复杂的sql脚本.在这个时候,如果掌握一些数据库函数,对我们的工作可以事半功倍的作用. 这篇主要记录学习Oracle 的窗口函数的一些体会....
  • china_shrimp
  • china_shrimp
  • 2016年08月28日 18:16
  • 808

oracle分析函数技术详解(配上开窗函数over())

一、Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个...
  • haiross
  • haiross
  • 2013年11月11日 11:36
  • 32182

Oracle 实现累加(全)

  今天看到论坛中有关于Oracle实现累加功能的问题,为了解决疑问,下面为在Oracle中实现累加的2种方法. ============================Question=======...
  • mantisXF
  • mantisXF
  • 2008年07月28日 12:58
  • 13565

ORACLE逐行累计求和方法(OVER函数)

sql over的作用及用法 1.RANK ( ) OVER ( [query_partition_clause] order_by_clause ) DENSE_RANK ( ) OVER ( ...
  • zengwenjie123
  • zengwenjie123
  • 2016年10月23日 00:51
  • 9339

Oracle按月份累计求和

select to_char(reg_Date,'yyyy-mm') regDate2,sum(count(*)) over(order by to_char(reg_Date,'yyyymm'), ...
  • macrobn
  • macrobn
  • 2014年04月15日 16:16
  • 2914

Oracle统计某一年中的1-12个月的数据总和(非常实用)

实战案例 查询2015年1月到12个月的所有实有人口数量和往年2014年1月到12个月的实有人口数量,没有的月份显示 人口数量为0.类似效果如图 ...
  • my543843165
  • my543843165
  • 2016年10月24日 18:11
  • 3949
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle 利用窗口函数计算合计、上月、下月及累计值等
举报原因:
原因补充:

(最多只允许输入30个字)