如何使用SUM()OVER()(How can I use SUM() OVER())

2019-06-23 10:47发布

我不明白这个代码的bug

ID      AccountID       Quantity
1          1               10           Sum = 10
2          1               5                = 10 + 5 = 15
3          1               2                = 10 + 5 + 2 = 17
4          2               7                = 7
5          2               3                = 7 + 3 = 10  

SELECT ID, AccountID, Quantity, 
       SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT, 
FROM tCariH

Answer 1:

好像你所期望的查询返回运行总和,但它必须给你的两个分区相同的值AccountID

为了获得与运行总计SUM() OVER ()你需要添加一个ORDER BY后子条款PARTITION BY … ,就像这样:

SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)

但要记住,并不是所有的数据库系统支持ORDER BYOVER一个窗口集合函数的条款。 (例如,SQL服务器不支持它,直到最新版本的SQL Server 2012)



Answer 2:

如果您使用的是SQL 2012,你应该尝试

SELECT  ID, 
        AccountID, 
        Quantity, 
        SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY AccountID rows between unbounded preceding and current row ) AS TopBorcT, 
FROM tCariH

如果有的话,有效期限栏以便更好。



Answer 3:

查询会是这样:

SELECT ID, AccountID, Quantity, 
       SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT 

       FROM #Empl ORDER BY AccountID

通过类似的组作品分区。 在这里,我们用的AccountID组合,这样一笔钱是对应于帐户ID。

首先第一种情况下,帐户ID = 1,则总和(数量)= 10 + 5 + 2 => 17&对于帐户ID = 2,则总和(数量)= 7 + 3 => 10

这样的结果会出现像附着快照 。



文章来源: How can I use SUM() OVER()
标签: sql sum