对于过滤的行,MYSQL返回0

时间:2015-10-07 16:51:48

标签: mysql sum

我尝试使用“WHERE”进行过滤,但我希望将过滤后的行显示为“NULL”或0而不是隐藏它们。

这是我的代码:

SELECT *, IFNULL(SUM(ROUND(TIMESTAMPDIFF(MINUTE,start,end)/60,1)),0) urlaub 
FROM time_entries e
LEFT JOIN users u ON e.user_id = u.id
WHERE e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE)
GROUP BY e.user_id

最佳, 克里斯

2 个答案:

答案 0 :(得分:0)

我可能只是迂腐,但万一有真正的误解......他们不是“隐藏”,他们不在那里。 WHERE的要点是选择要检索的记录,以便在只有少量数据记录相关时不检索整个表内容。

但是如果你想做的事情就是这样,你应该能够添加另一个结果字段,如下所示: (e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE)) AS relevantRecord

答案 1 :(得分:0)

搞定了!这是返回我想要的代码:

SELECT
*,
IFNULL(SUM(CASE WHEN e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE) THEN ROUND(TIMESTAMPDIFF(MINUTE, start, end)/60,1) ELSE 0 END),0) AS urlaub
FROM time_entries e
LEFT JOIN users u ON e.user_id = u.id
GROUP BY e.user_id

谢谢!