簡體   English   中英

在MySQL中運行多個類別的總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM