2017-05-16 34 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

您是否已經有「訂單」列,還是需要進行計算? –

+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`;