[英]mysql - running sums for multiple categories with group by clause
[英]Running Sums for Multiple Categories in MySQL
我有一張表格
Category Time Qty
A 1 20
B 2 3
A 3 43
A 4 20
B 5 25
我需要在MySQL中按類別計算運行總計。 結果看起來像這樣:
Category Time Qty Cat.Total
A 1 20 20
B 2 3 3
A 3 43 63
A 4 20 83
B 5 25 28
知道如何在MySQL中有效地做到這一點嗎? 我搜索的范圍很廣,但我能找到的是有關如何在MySQL中插入一個單獨運行總計的信息。 我想知道是否有任何方法可以使用GROUP BY或類似的構造來實現這一目標。
您可以在子查詢中計算總和:
select Category
, Time
, Qty
, (
select sum(Qty)
from YourTable t2
where t1.Category = t2.Category
and t1.Time >= t2.Time
) as CatTotal
from YourTable t1
交易可讀性的速度,您可以使用MySQL變量來保持運行總和:
select Category
, Time
, Qty
, @sum := if(@cat = Category,@sum,0) + Qty as CatTotal
, @cat := Category
from YourTable
cross join
(select @cat := '', @sum := 0) as InitVarsAlias
order by
Category
, Time
此構造需要排序才能工作; 如果需要不同的順序,請將查詢包裝在子查詢中:
select Category
, Time
, Qty
, CatTotal
from (
select Category
, Time
, Qty
, @sum := if(@cat = Category,@sum,0) + Qty as CatTotal
, @cat := Category
from YourTable
cross join
(select @cat := '', @sum := 0) as InitVarsAlias
order by
Category
, Time
) as SubQueryAlias
order by
Time
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.