【发布时间】:2013-12-30 18:47:25
【问题描述】:
SELECT `mi`.`Item_Description` AS `Item_Description`,
`psi`.`Item_ID` AS `Item_ID`,
`mt`.`Type_Description` AS `Type_Description`,
`psi`.`Item_Type_Id` AS `Item_Type_Id`,
`psi`.`Item_Unit` AS `Item_Unit`,
(Select Sum(Item_Quantity_Delivered) From project_store_input Where Item_ID = psi.Item_Id) AS `Total_Input`,
(Select Sum(Output_Quantity) From project_store_output Where Item_Id = psi.Item_Id) as Total_Output,
((Select Sum(Item_Quantity_Delivered) From project_store_input Where Item_ID = psi.Item_Id) - (Select Sum(Output_Quantity) From project_store_output Where Item_Id = psi.Item_Id)) as Balance
FROM (`project_store_input` `psi`
LEFT JOIN `materials_items` `mi` on(`mi`.`Item_ID` = `psi`.`Item_ID`)
LEFT JOIN `materials_types` `mt` on(`mt`.`Type_ID` = `psi`.`Item_Type_Id`)
LEFT JOIN `suppliers` `s` on(`s`.`Supplier_ID` = `psi`.`Supplier_ID`)
LEFT JOIN `project_store_output` as `pso` on (pso.Item_Id = psi.Item_ID))
GROUP BY `psi`.`Item_ID`
此 SQL 查询是从两个表“project_store_input”和“project_store_output”计算余额,结果应该浏览(项目名称、项目 ID、Total_Input、Total_Output、Balance)
请有任何建议, 提前谢谢...
【问题讨论】:
-
GROUP BY 有什么用?
-
确保您已在要选择的每个字段中创建索引
-
另外,您没有以任何方式选择或过滤 pso 或供应商,那么为什么要包括它们呢?
-
如果它在 select 的同一个表上,为什么要使用子查询来进行求和?不需要,把sum和group by 其他不在sum上的字段就行了。
-
请发表解释。
标签: mysql sql performance select query-optimization