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

  • 相关阅读:
    .NET:CLR via C# The CLR’s Execution Model
    VisualStudio:WEB 性能测试和负载测试 入门
    Maven:Maven 入门
    技术人生:东莞之行
    技术人生:新的生活计划
    Java:使用 Java 开发的一个异常处理框架
    .NET:命令行解析器介绍
    技术人生:希望有生之年开发一个“自己的解释语言”
    .NET:异常处理的两条“黄金定律”,求批!
    FAQ:Domain Event 和 C# 中的 Event 有啥区别?
  • 原文地址:https://www.cnblogs.com/ghelement/p/4600169.html
Copyright © 2011-2022 走看看