我有两张表:进口和订单:我分别附上了这些表 我想要的是: 1.所有导入表组数据按产品ID分组。 2.产品ID的订单表的总和列数。 在我的表中,导入表中有3行,产品编号为1,订单表中有两行,产品编号为1,这两行的编号为:1,5。 所以我的预期结果是:导入表的所有行没有重复相同的product_id和总数是6.但是我得到的是18而不是6.但是对于产品ID 2我得到的碎片为1.这意味着6重复为3因导入表中的3行而产生的时间,其中product_id = 1。
但我怎样才能得到预期的结果呢?这是我的疑问:
SELECT `Import`.*, SUM(case when orders.status = "sold" THEN orders.pieces else 0 end) as total_sell FROM `amrajegeachi`.`imports` AS `Import` LEFT OUTER JOIN `orders` ON `Import`.`product_id` = `orders`.`product_id` WHERE 1 = 1 GROUP BY `Import`.`product_id`
这就是结果:
Array
(
[0] => Array
(
[Import] => Array
(
[id] => 1
[category_id] => 1
[product_id] => 1
[amount] => 50
[cost] => 8320
[paid] => 0
[comment] => transportation and others cost: 100
[created] => 2015-06-22 12:09:20
)
[0] => Array
(
[total_sell] => 18
)
)
[1] => Array
(
[Import] => Array
(
[id] => 2
[category_id] => 2
[product_id] => 2
[amount] => 15
[cost] => 3000
[paid] => 0
[comment] =>
[created] => 2015-06-22 12:10:36
)
[0] => Array
(
[total_sell] => 1
)
)
)
任何建议都是挪用的。提前致谢。
答案 0 :(得分:1)
我太快读了你的问题而没有回答你的问题:
你说1. all data of import table group by product id. 2. sum of pieces column of orders table for a product id.
您正在使用'SUM'这是一个聚合函数。当您使用聚合函数时,任何其他列必须位于GROUP BY
子句中才能聚合它们,因此如果您有:
Col1 | Col2
1 | CategoryA
2 | CategoryA
2 | CategoryB
如果选择SUM(Col1), Col2
无效,则因为SUM是聚合而Col2不是。您需要GROUP BY Col2
:
SELECT SUM(Col1), Col2 FROM table GROUP BY Col2
这会给你:
3 | CategoryA
2 | CategoryB
您的问题是您从导入表中选择*,这会导致您的分组错误。你需要这样做:
SELECT
`Import`.product_id,
SUM(case when orders.status = "sold" THEN orders.pieces else 0 end) as total_sell
FROM `amrajegeachi`.`imports` AS `Import`
LEFT OUTER JOIN `orders` ON `Import`.`product_id` = `orders`.`product_id`
WHERE 1 = 1
GROUP BY `Import`.product_id
这应该按产品ID对SUM进行分组,并为您提供正确的结果。