sql >> Databáze >  >> RDS >> Mysql

Průběžné součty pro více kategorií v MySQL

Součet můžete vypočítat v dílčím dotazu:

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

Čitelnost obchodování pro rychlost, můžete použít proměnnou MySQL k udržení průběžného součtu:

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

Aby tato konstrukce fungovala, je vyžadováno uspořádání; pokud potřebujete jiné pořadí, zabalte dotaz do poddotazu:

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



  1. Jak změnit definici sloupce MySQL?

  2. Laravel:Jak používat vztahy více kontingenčních tabulek

  3. Získávání denních počtů událostí, které se nestávají každý den

  4. Hromadně vložte a získejte vrácené ID laravel