我有一个表格延迟,用户可以记录他们在项目上花费的时间。声明有开始和结束时间。
我想要一个特定的项目(id = 1),即每个用户在项目上花费的总时间,即使用户没有在项目上花费任何时间< /强>
表格(简化):
users
-----
- id
- name
- ...
projects
--------
- id
- name
declarations
------------
- id
- user_id
- project_id
- begin
- end
我们假设有2个用户。用户ID = 1花了一些时间在项目上,用户ID = 2没有做任何事情。
select users.*, sum(timestampdiff(second, declarations.start, declarations.end)) as seconds
from users
join declarations on declarations.user_id = users.id
where declarations.project_id = 1
group by users.id
通过上述查询,仅显示用户1。如何以这种方式修改查询以包含所有其他用户,0
的值为seconds
?
答案 0 :(得分:0)
考虑使用LEFT OUTER JOIN
并将WHERE
条件移至JOIN ON
条件,如
select users.*,
sum(timestampdiff(second, declarations.start, declarations.end)) as seconds
from users
left join declarations on declarations.user_id = users.id
and declarations.project_id = 1
group by users.id