zoukankan      html  css  js  c++  java
  • PARTITION BY 和 group by

    sum()   over   (PARTITION   BY   ...)   是一个分析函数。   他执行的效果跟普通的sum   ...group   by   ...不一样,它计算组中表达式的累积和,而不是简单的和。   
        
    表a,内容如下:   
    B C D   
    02 02 1   
    02 03 2   
    02 04 3   
    02 05 4   
    02 01 5   
    02 06 6   
    02 07 7   
    02 03 5   
    02 02 12   
    02 01 2   
    02 01 23   
        
    select   b,c,sum(d)   e   from   a   group   by   b,c   
    得到:   
    B C E   
    02 01 30   
    02 02 13   
    02 03 7   
    02 04 3   
    02 05 4   
    02 06 6   
    02 07 7   
        
    而使用分析函数得到的结果是:   
    SELECT   b,   c,   d,   SUM(d)   OVER(PARTITION   BY   b,c   ORDER   BY   d)   e   FROM   a   
    B C E   
    02 01 2   
    02 01 7   
    02 01 30   
    02 02 1   
    02 02 13   
    02 03 2   
    02 03 7   
    02 04 3   
    02 05 4   
    02 06 6   
    02 07 7   
    结果不一样,这样看还不是很清楚,我们把d的内容也显示出来就更清楚了:   
    SELECT   b,   c,   d,SUM(d)   OVER(PARTITION   BY   b,c   ORDER   BY   d)   e   FROM   a   
    B C D E   
    02 01 2 2                     d=2,sum(d)=2   
    02 01 5 7                     d=5,sum(d)=7   
    02 01 23 30                   d=23,sum(d)=30   
    02 02 1 1                     c值不同,重新累计   
    02 02 12 13   
    02 03 2 2   
    02 03 5 7   
    02 04 3 3   
    02 05 4 4   
    02 06 6 6   
    02 07 7 7

    但 我们可以利用partition by 找到一个表中 不同分组中最大和最小的一个值

    select a.* from

      select row_number() over(partition by nId order by a.inMemberCount asc) nRow,aa,bb from TableA

    )  a 

    where nRow=1

  • 相关阅读:
    ASP.NET Core 3.0 迁移避坑指南
    Go初学乍练
    IdentityServer4 常见问题
    ASP.NET Core 奇淫技巧之动态WebApi
    Visual Studio 2019 16.1 使用 .NET Core 3.0
    【Java】maven多项目资源共享
    【Web】Web开发中的异常处理方案
    【UML】Java代码与UML模型相互转换方法
    【Spark】为什么没有任务调度到新增的Worker之上???
    【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了
  • 原文地址:https://www.cnblogs.com/ghelement/p/4600169.html
Copyright © 2011-2022 走看看