7

私はフォームのテーブルを持っています

 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に単一の現在の合計を挿入する方法に関する情報だけです。これを実現するためにGROUPBYまたは同様の構造を使用する方法があるかどうか疑問に思います。

4

1 に答える 1

14

サブクエリで合計を計算できます。

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
于 2011-02-17T17:35:04.177 に答える