必威体育Betway必威体育官网
当前位置:首页 > IT技术

oracle最全面的分析函数over(Partition by...)及开窗函数详解

时间:2019-11-03 23:45:43来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

开窗函数

大型项目中通常会涉及到统计分析相关的功能,今天笔者把oracle常用的分析函数用法和区别通过详细的案例整理出来,希望对各位同学有帮助,也算是对自己的一个重新温故。

常用的分析函数如下所列:
row_number() over(partition by ... order by ...)
rank() over(partition by ... order by ...)
dense_rank() over(partition by ... order by ...)
count() over(partition by ... order by ...)
max() over(partition by ... order by ...)
min() over(partition by ... order by ...)
sum() over(partition by ... order by ...)
avg() over(partition by ... order by ...)
first_value() over(partition by ... order by ...)
last_value() over(partition by ... order by ...)
lag() over(partition by ... order by ...)
lead() over(partition by ... order by ...)

一:分析函数over

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

下面通过几个例子来说明其应用。

1、统计某商店的营业额。        

date       sale

1           20

2           15

3           14

4           18

5           30

   规则:按天统计:每天都统计前面几天的总额,得到的结果:

select day,sale,sum(sale) over (order by day asc ) as 连续求和,sum(sale) over() as 总和 from t_temp;
2、统计各班成绩第一名的同学信息

NAME   CLASS   S                         

   ----- ----- ---------------------- 

   fda       1      80                     

   ffd       1      78                     

   dss      1      95                     

   cfe       2      74                     

   gds      2      92                     

   gf        3      99                     

   ddd     3      99                     

   adf      3      45                     

   asdf    3      55                     

   3dd     3      78

 select * from                                                                       
    (                                                                            
    select name,class,s,rank()over(partition by class order by s desc) mm from t2
    )                                                                            
    where mm=1 
得到结果:

   NAME   CLASS    S                     MM                                                                                        

   ----- ----- ---------------------- ---------------------- 

   dss         1          95                      1                      

   gds        2          92                      1                      

   gf           3          99                       1                      

   ddd        3         99                       1   

注意:

   1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果         

   2.rank()和dense_rank()的区别是:

--rank()是跳跃排序,有两个第二名时接下来就是第四名

--dense_rank()l是连续排序,有两个第二名时仍然跟着第三名

3.分类统计 (并显示信息)

   A   B   C                      

   -- -- ---------------------- 

   m   a   2                      

   n   a   3                      

   m   a   2                      

   n   b   2                      

   n   b   1                      

   x   b   3                      

   x   b   2                      

   x   b   4                      

   h   b   3 

  select a,c,sum(c)over(partition by a) from t2                

  得到结果:

  A   B   C        SUM(C)OVER(PARTITIONBYA)      

  -- -- ------- ------------------------ 

  h   b   3        3                        

  m   a   2        4                        

  m   a   2        4                        

  n   a   3        6                        

  n   b   2        6                        

  n   b   1        6                        

  x   b   3        9                        

  x   b   2        9                        

  x   b   4        9  

如果用sum,group by 则只能得到

  A   SUM(C)                            

  -- ---------------------- 

  h   3                      

  m   4                      

  n   6                      

  x   9                      

  无法得到B列值       

https://www.cnblogs.com/dongyj/p/5992083.html

文章最后发布于: 2018-07-09 09:30:28

相关阅读

淘宝网店推广如何分析目标人群?

经常听见新手卖家在抱怨他的网店怎么推广做了几个月也没有什么效果。也用了很多方法,就是没有什么明显的效果。遇到这样的问题,新手

熊猫烧香病毒分析报告

熊猫烧香病毒分析报告 1.样本概况 1.1 样本信息病毒名称: spo0lsv.exe(熊猫烧香)大小: 30001 bytes所属家族:Worm(蠕虫)修改时间: 2

谁说菜鸟不会数据分析(入门篇)----- 学习笔记1(数据分析

1、何谓数据分析 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数

分析揭秘乐刷可以套京东白条

  乐刷可以套京东白条【VQ:199-06-73-143】点击按提示添加 【诚.信.第.一】【安.全.无.风.险】金融专业的团队,专业的服务,靠谱平

PLSQL 创建函数步骤

1. File-->New-->Program Window-->Function. 2.按照填写函数名称,参数值和返回值 3.OK后进入函数编辑窗口,窗口中有一个简明的函

分享到:

栏目导航

推荐阅读

热门阅读