• over(partation by ...)的使用方法


    over(partation by ...)的各种方法

    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 ...)
    partition by 意思是 分区依据 
    order by 意思是 排序
    over()从序列1开始到n
    select day,sale,sum(sale) over (order by day asc ) as 连续求和,sum(sale) over() as 总和 from t_temp;

    一:分析函数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列值       

    生活不止眼前的苟且,还有诗与远方的田野! 我会定期更新我的微博,来一起自学python! --------如有问题欢迎指正~------------
  • 相关阅读:
    14.使用ConfigMap管理应用配置
    13.实战交付一套dubbo微服务到k8s集群(6)之交付dubbo服务的消费者集群到K8S
    12.实战交付一套dubbo微服务到k8s集群(5)之交付dubbo-monitor到K8S集群
    11.实战交付一套dubbo微服务到k8s集群(4)之使用Jenkins进行持续构建交付dubo服务的提供者
    11.实战交付一套dubbo微服务到k8s集群(3)之dubbo微服务底包镜像制作
    10.实战交付一套dubbo微服务到k8s集群(3)之二进制安装Maven
    9.实战交付一套dubbo微服务到k8s集群(2)之Jenkins部署
    《说透中台》读书笔记
    消息队列高手课——04 | 如何利用事务消息实现分布式事务?
    消息队列高手课——03 | 消息模型:主题和队列有什么区别?
  • 原文地址:https://www.cnblogs.com/huangchenggener/p/11065535.html
Copyright © 2020-2023  润新知