MYSQL选择SUM()

时间:2014-12-05 02:45:47

标签: mysql database

我要做的是查看是否有与工单有关的材料。所以我加入工单材料表,按“工单”分组,然后使用sum()查找与工单相关的总数量。关于金额唯一重要的是它是否大于0。如果它超过0我希望它出现在我的结果中,如果不是我不希望它出现在我的结果中。

                SELECT `work_order`.`PO`
                        ,`work_order`.`Work Order`
                        ,`work_order`.`Part`
                        ,`work_order`.`Revision`
                        ,`work_order`.`Description`
                        ,`work_order`.`Drawing`
                        ,`work_order`.`Quantity`
                        ,`work_order`.`CSM`
                FROM `work_order`
                LEFT JOIN `wo_material`
                    ON `work_order`.`Work Order`=`wo_material`.`WO`
                WHERE `work_order`.`CSM` OR IFNULL(SUM(IFNULL(`wo_material`.`Quantity`,0)),0)
                GROUP BY `work_order`.`Work Order`

错误是#1111 - 无效使用组功能。 如果我将WHERE行更改为

WHERE `work_order`.`CSM`

查询没有错误,但我的结果不正确。

在work_order上,工单是主要的。

在wo_material上,WO不是主要的或唯一的,它有另一个主要的RN列。

这只是一个查询,而不是一个程序。

MySQL版本5.6.2

1 个答案:

答案 0 :(得分:3)

使用having子句删除数量为零的行

           SELECT `work_order`.`PO`
                    ,`work_order`.`Work Order`
                    ,`work_order`.`Part`
                    ,`work_order`.`Revision`
                    ,`work_order`.`Description`
                    ,`work_order`.`Drawing`
                    ,`work_order`.`Quantity`
                    ,`work_order`.`CSM`
            FROM `work_order`
            LEFT JOIN `wo_material`
                ON `work_order`.`Work Order`=`wo_material`.`WO`
            GROUP BY `work_order`.`Work Order`
            HAVING  SUM(IFNULL(`wo_material`.`Quantity`,0)) > 0