• SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用


               

                由于前一段时间胃痛,导致博客园博客都停更了一个月左右。近几天,胃病终于稍微有所好转,决定重新写博文。

                前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份、月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和。尼玛,感觉还是没有说清,下面用图表示。

              

           

     SQL 测试表脚本  

        

    DECLARE @Temp Table
    (
      ID INT, --- 月份
      MoneyData Float  --- 金额 
    )
    
    insert  INTO @TEMP
    SELECT 1,100 UNION ALL
    SELECT  2,200 UNION ALL
    SELECT  3,300 UNION ALL
    SELECT  4,400 UNION ALL
    SELECT  5,500 UNION ALL
    SELECT  6,600 UNION ALL
    SELECT  7,600
    

     一 自连接

    SELECT  A.ID, SUM(B.MoneyData)  FROM @Temp A INNER JOIN @Temp B
    ON A.ID>=B.ID GROUP BY A.ID
    
    ------ 重点在于 ON 条件,通过自连接 A.ID >= B.ID ,可获取所需数据,再通过
    GROUP BY 、SUM 即可统计求和
    

      

    二 开窗函数

    SELECT  ID, MoneyData,   SUM(MoneyData) OVER( ) AS '总销售额',
    SUM(MoneyData) OVER( PARTITION BY ID ) AS '月销售额',
     SUM(MoneyData) OVER( ORDER BY ID ASC)  AS '当月+当月前销售额'
     FROM @Temp
    
    ---- 此处,使用开窗函数使用更为简单,不过,其中 SUM() OVER ( ORDER BY ID ASC ) 即可实现以上功能
    

      

    关于,开窗函数的具体用法,可参考微软 MSDN 官方 API 文档,最后,推荐一本开窗函数书:基于 SQL SERVER 2012 窗口函数。

    参考:https://msdn.microsoft.com/zh-cn/library/ms173454.aspx

  • 相关阅读:
    ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」
    [HDU2065] "红色病毒"问题
    [SP1043] GSS1
    [POJ3233] Matrix Power Series
    「网络流24题」圆桌问题
    [BZOJ4260] Codechef REBXOR
    [HDU5536] Chip Factory
    ☆ [HDU4825] Xor Sum「最大异或和(Trie树)」
    「网络流24题」最长不下降子序列问题
    「网络流24题」试题库问题
  • 原文地址:https://www.cnblogs.com/Lumia1020/p/5439982.html
Copyright © 2020-2023  润新知