如果没有结果,count()如何显示0?

时间:2013-06-20 11:32:46

标签: mysql count coalesce

虽然标题表明它已经被回答了,但我尝试了所有的建议,但是在我的情况下无法做到:

我有一个包含2列的表,包含周数的Week,以及在这几周内保存活动类型的Worktype。有两种类型的活动(调试,集成),每周可以有几个条目。 典型地:

+------+-------------+
| week | worktype    |
+------+-------------+
|   12 | debug       |
|   12 | debug       |
|   12 | debug       |
|   12 | integration |
|   12 | debug       |
|   12 | debug       |
|   12 | debug       |
|   12 | debug       |
|   12 | debug       |
|   12 | debug       |
|   12 | integration |
|   12 | debug       |
|   12 | debug       |
+------+-------------+

我想每周都展示出“整合”的数量。 我试过了

Select {一周{1}} {worktype {1}} {worktype {1}}

它可以在几周内正常工作,但不会为其他人显示任何内容(没有显示任何集成的周数)。

我尝试使用, count( worktype ) from xxx where但在这种情况下没有帮助,因为结果永远不会为NULL,因此coalesce永远不会将其替换为零。 试过="integration"这对......没有帮助......

有什么建议吗?

谢谢, 雅克

1 个答案:

答案 0 :(得分:1)

您可以对在IF中计算的字段执行SUM: -

SELECT week, SUM(IF(worktype="debug", 1, 0)) AS Debug_Count, SUM(IF(worktype="integration", 1, 0)) AS Integration_Count
FROM xxx
GROUP BY week

或者只为您关心的工作类型获取一个列,并避免使用IF: -

SELECT Sub1.week, COUNT(xxx.worktype)
FROM (SELECT DISTINCT week 
FROM xxx) Sub1
LEFT OUTER JOIN xxx
ON Sub1.week = xxx.week
AND xxx.worktype = "integration"
GROUP BY week