Bog*_*dan 5 mysql sql running-total
我有一张表格
Category Time Qty
A 1 20
B 2 3
A 3 43
A 4 20
B 5 25
Run Code Online (Sandbox Code Playgroud)
我需要在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
Run Code Online (Sandbox Code Playgroud)
知道如何在MySQL中有效地做到这一点吗?我搜索的范围很广,但我能找到的是有关如何在MySQL中插入一个单独运行总计的信息.我想知道是否有任何方法可以使用GROUP BY或类似的构造来实现这一目标.
And*_*mar 11
您可以在子查询中计算总和:
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
Run Code Online (Sandbox Code Playgroud)
交易可读性的速度,您可以使用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
Run Code Online (Sandbox Code Playgroud)
此构造需要排序才能工作; 如果需要不同的顺序,请将查询包装在子查询中:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6636 次 |
| 最近记录: |