0

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

我有一张有 2 列的表,Week 保存周数,Worktype 保存这几周的活动类型。有 2 种不同类型的活动(调试、集成),每周可以有多个条目。通常:

+------+-------------+
| 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, count(工作类型) from xxx where工作类型="integration"

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

我尝试使用coalesce(count(工作类型),0),但在这种情况下它没有帮助,因为结果永远不会为 NULL,所以 coalesce 永远不会用零替换它。试过find_in_set()了也无济于事......

有什么建议吗?

谢谢, 雅克

4

1 回答 1

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
于 2013-06-20T11:40:12.093 回答