php mysql总和问题

时间:2012-01-04 06:50:40

标签: php mysql sum

我想生成一份报告,以累计一个月内不同分支机构订购的总库存数量,每个分支机构将按合并(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

依旧......

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

下面是我的查询:

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

希望有人可以为此提供帮助。

感谢。

4 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分:1)

假设您有一个有限数量的分支,您可以为您希望显示的每个“列”(按分支)创建一个带有子选择的查询,并使用您的总和,如此...

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

等。

这不是一个非常优雅的解决方案,但它会产生你想要的东西。

否则你可以按照其他海报的建议,从sql的角度来看效率更高,但不会生成你希望看到的列(根据你的问题)。

答案 2 :(得分:1)

这是某种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

答案 3 :(得分:0)

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