php mysql sum issue


php mysql sum issue

我想生成一个报告来累积不同分支机构在一个月内订购的总库存数量,每个分支机构将按合并的(GROUP by)库存汇总数量。

为了便于理解,我整理了数据库表如下:

Item     Branch        Order_Quantity
---------------------------------------
Pencil   Branch-A         5
Ruler    Branch-D         3
Staple   Branch-C         12
Pencil   Branch-A         5
Ruler    Branch-B         3
Staple   Branch-C         2
Pencil   Branch-A         10
Ruler    Branch-A         6
Staple   Branch-D         1

例如,下面是预期结果的草案:

Item     Branch-A     Branch-B     Branch-C     Branch-D
----------------------------------------------------------
Pencil     20            15           32           8
Ruler      12            0            40           10
Staple     4             8             5           0

等等…

如何使用query调用上述结果,并将每个和分配给各自的分支列?

以下是我的查询:

SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item`

但当我调用并循环该表时,结果将显示每个分支的总数

Item     Branch-A     Branch-B     Branch-C     Branch-D
----------------------------------------------------------
Pencil     75            75           75           75
Ruler      62            62           62           62
Staple     17            17           17           17

希望有人能帮上忙。

谢谢。

尝试:

SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item`, `Branch`

这是某种PIVOT:

select item, 
    sum(case when branch = 'Branch-A' then order_Quantity else 0 end) as BranchA,
    sum(case when branch = 'Branch-B' then order_Quantity else 0 end) as BranchB,
    sum(case when branch = 'Branch-C' then order_Quantity else 0 end) as BranchC,
    sum(case when branch = 'Branch-D' then order_Quantity else 0 end) as BranchD
from yourTable
group by item

假设你有有限数量的分支,你可以创建一个查询,为你想要显示的每个"列"(按照每个分支)和你的总和进行子选择,就像这样…

select 
  (select sum(order_quantity) from table where branch = 'Branch-A'),
  (select sum(order_quantity) from table where branch = 'Branch-B'),

等等。。

这不是一个非常优雅的解决方案,但它会带来你想要的结果。

否则,您可以遵循其他海报的建议,从sql的角度来看,这更有效,但不会生成您希望看到的列(根据您的问题)。

SELECT SUM(Order_Quantity) AS CNT FROM `table` GROUP BY `Branch`;