web-dev-qa-db-ja.com

SUM()OVER()の使用方法

このコードのバグを理解できません

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
18
serkan

クエリが実行中の合計を返すと予想したようですが、AccountIDの両方のパーティションに同じ値を与えている必要があります。

SUM() OVER ()で積算合計を取得するには、次のようにORDER BYの後にPARTITION BY …副節を追加する必要があります。

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

ただし、すべてのデータベースシステムがウィンドウ集約関数のOVER句でORDER BYをサポートしているわけではないことを覚えておいてください。 (たとえば、SQL Serverは最新バージョンのSQL Server 2012までサポートしていませんでした。)

27
Andriy M

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

可能な場合は、日付列で並べ替えてください。

7
UV.

クエリは次のようになります。

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

       FROM #Empl ORDER BY AccountID

Group byのように機能します。ここでは、AccountIDでグループ化しているため、sumはAccountIDに対応します。

最初の最初の場合、AccountID = 1、次にsum(quantity)= 10 + 5 + 2 => 17&AccountID = 2の場合、sum(Quantity)= 7 + 3 => 10

結果は、添付の snapshot のように表示されます。

2
AjaySharma2061