2017-05-16 10 views
2

累積積を計算したい大きなMySQLテーブルがあります。このプロダクトはグループごとに計算する必要があり、グループは最初のカラムの値で定義されます。例えば大きなMySQLテーブルの累積積

name | number | cumul | order 
----------------------------- 
a | 1  | 1  | 1 
a | 2  | 2  | 2 
a | 1  | 2  | 3 
a | 4  | 8  | 4 
b | 1  | 1  | 1 
b | 1  | 1  | 2 
b | 2  | 2  | 3 
b | 1  | 2  | 4 

私はthis solutionを見てきましたが、私の場合は参加または副選択するために効率的であるとは思いません。

私はthis solutionを見ましたが、それは名前でパーティション化しないことを除いて私が望むものです。

+0

あなたはまだ何かを試してみましたか?これを解決するには、セッション変数を大量に使用する必要があり、大きな仕事になる可能性があります。 –

+0

すでに 'order'カラムがありますか、それとも計算する必要がありますか? –

+0

あなたのテーブルはどのように "ビッグ"ですか? – Philipp

答えて

2

これは、累積合計のようになります。

select t.*, 
     (@p := if(@n = name, @p * number, 
       if(@n := name, number, number) 
       ) 
     ) as cumul 
from t cross join 
    (select @n := '', @p := 1) params 
order by name, `order`;