4

次のフィールドを持つテーブルがあります。

season, collection, product_key, units_sold

余分に追加したい

cumulative_sold column(aggreate of previous rows values)

満たす必要がありますorder by season, collection,units_sold

sample input
---------- 
ss,f1,1,3
ss,f1,2,4
ss,f1,3,4
ss,f2,1,1
ss,f2,5,1

expected output 
--------------
ss,f1,1,3,3 
ss,f1,2,4,7(3+4)
ss,f1,3,4,11(3+4+4)
ss,f2,1,1,1
ss,f2,5,1,2(1+1)
4

1 に答える 1

1

相関サブクエリを使用して累積合計を実行できます。

select season, collection, product_key, units_sold,
       (select sum(units_sold)
        from t t2
        where t2.season < t.season or
              t2.season = t.season and t2.collection < t.collection or
              t2.season = t.season and t2.collection = t.collection and t2.units_sold <= t.units_sold
       ) as cumsum            
from t;

これは標準 SQL です。大量のデータがある場合は、 にインデックスが必要になりますt(season, collection, units_sold)

編集:

全体の累積合計ではなく、特定のシーズンの特定のコレクションについてのみこれが必要な場合は、次のようにします。

select season, collection, product_key, units_sold,
       (select sum(units_sold)
        from t t2
        where t2.season = t.season and t2.collection = t.collection and
              t2.units_sold <= t.units_sold
       ) as cumsum            
from t;

編集II:

これはかなり標準的なタイプの SQL です。質問を正しく理解していただけると助かります。で重複を処理するにはunits_sold:

select season, collection, product_key, units_sold,
       (select sum(units_sold)
        from t t2
        where t2.season = t.season and t2.collection = t.collection and
              (t2.units_sold < t.units_sold or
               t2.units_sold = t.units_sold and t2.product_key <= t.product_key
              )
       ) as cumsum            
from t;
于 2013-09-19T10:52:15.823 に答える