LEFT JOIN SUM与WHERE子句

时间:2015-03-24 04:54:38

标签: mysql left-join

以下查询始终为所有行而不是userid输出SUM。不确定在哪里看。请帮忙。

SELECT * FROM assignments
        LEFT JOIN (
            SELECT SUM(timeworked) AS totaltimeworked
            FROM time_entries
        ) assignments ON (userid = assignments.userid AND ticketid = ?) 
        WHERE       ticketid = ?
        ORDER BY    assigned,scheduled

1 个答案:

答案 0 :(得分:1)

如果要保留SELECT *,则必须在子查询中添加group by子句。像这样的东西

SELECT * FROM assignments
    LEFT JOIN (
        SELECT SUM(timeworked) AS totaltimeworked
        FROM time_entries
        GROUP BY userid
    ) time_entriesSummed ON time_entriesSummed.userid = assignments.userid
    WHERE       ticketid = ?
    ORDER BY    assigned,scheduled

但更好的方法是更改​​SELECT *,而不是直接选择要添加group by子句的字段。像这样的东西

 SELECT
    assignments.id,
    assignments.assigned,
    assignments.scheduled,
    SUM(time_entries.timeworked) AS totalTimeworked
 FROM assignments
 LEFT JOIN time_entries 
 ON time_entries.userid = assignments.userid
 GROUP BY assignments.id, assignments.assigned, assignments.scheduled

修改1 在chameera的评论中提到的查询2中包含的表名