• 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! --------如有问题欢迎指正~------------
  • 相关阅读:
    使用 UPX 压缩可执行文件——UPX有不光彩的使用记录,它被用来给木马和病毒加壳,躲避杀毒软件的查杀
    进程注入检测 —— RtlCaptureStackBackTrace 获取当前函数的调用栈函数
    教程:开始使用 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy——威胁狩猎用,含一些异常检测的包
    查看GPU占用率以及指定GPU加速程序
    columbo——EDR上进程注入可以使用,依赖Volatility3 内存提取,无文件攻击典型场景
    AugLy 是fb的一个数据增强库
    IBM的人工智能安全隐私包——感觉就是看论文实现了一个工具,实际效果待工业检验
    Aequitas 偏见和公平审计工具包——如果是真的数据不均衡,效果会不会很差呢?
    进程注入如何通过调用栈,使用ML分类来检测——非常值得借鉴,待实践
    linux diff对比文件
  • 原文地址:https://www.cnblogs.com/huangchenggener/p/11065535.html
Copyright © 2020-2023  润新知