在 MySQL 中运行多个类别的总和

Posted

技术标签:

【中文标题】在 MySQL 中运行多个类别的总和【英文标题】:Running Sums for Multiple Categories in MySQL 【发布时间】:2011-06-29 06:37:24 【问题描述】:

我有一张表格

 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 或类似的构造来实现这一点。

【问题讨论】:

必须是累计还是可以一次性计算出最终的总数? 我需要这个@fredley 的总和你知道怎么做吗?假设我和他有同样的桌子 【参考方案1】:

您可以在子查询中计算总和:

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

【讨论】:

这个表现如何 此解决方案不考虑时间列。它确实部分起作用......但随着时间的推移运行总数不起作用,仅与类别一起起作用。 -- 我仍在研究解决方案。

以上是关于在 MySQL 中运行多个类别的总和的主要内容,如果未能解决你的问题,请参考以下文章

如何计算mysql中多个条件值的总和

我想在 for 循环中串联运行多个变量,我想取 x 和 y 的每次迭代的总和

如何对 Solr 中的多个字段执行嵌套聚合?

有这个 mysql 查询我希望使用多个条件总和。当我在同一行中使用 2 个 where 时,它​​显示一个错误

MySQL按查询分组,多个总和不使用索引,滞后于使用文件排序

mysql 组 concat 成多个字段