首页 > 解决方案 > 在 MySQL 中,如何将 count(*) 显示为 0 而不是根本不显示该行?

问题描述

因此,对下面的语句进行细分,试图找出具有以下技能的员工总数:p1、p2 并且已获得认证> 10。

SELECT name, COUNT(empNumber) 
FROM SKILL 
WHERE (certified > 10) AND name IN ('p1', 'p2') 
GROUP BY name;

数据库中:P1 有 2 名员工,P2 有 0 名员工

但是,显示的是

name | count(empNumber)
P1   |       2
P2   |       0   <= this row doesn't show but would like if it does

只需使用 select 语句而不使用连接。谢谢

标签: mysqlsqlselect

解决方案


WHERE逻辑移入计数:

SELECT
    name,
    COUNT(CASE WHEN certified > 10 THEN empNumber END)
FROM SKILL 
WHERE name IN ('p1', 'p2') 
GROUP BY name;

certifiedWHERE子句中进行检查的问题在于,它会过滤掉不匹配的记录,然后才能在发生事件时对其进行计数GROUP BY。我上面的版本聚合了所有记录,然后使用条件聚合来获取匹配计数。

你也可以SUM在这里使用:

SELECT
    name,
    SUM(CASE WHEN certified > 10 THEN 1 ELSE 0 END)
FROM SKILL
...

推荐阅读