mysql - 在 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 语句而不使用连接。谢谢
解决方案
将WHERE
逻辑移入计数:
SELECT
name,
COUNT(CASE WHEN certified > 10 THEN empNumber END)
FROM SKILL
WHERE name IN ('p1', 'p2')
GROUP BY name;
certified
在WHERE
子句中进行检查的问题在于,它会过滤掉不匹配的记录,然后才能在发生事件时对其进行计数GROUP BY
。我上面的版本聚合了所有记录,然后使用条件聚合来获取匹配计数。
你也可以SUM
在这里使用:
SELECT
name,
SUM(CASE WHEN certified > 10 THEN 1 ELSE 0 END)
FROM SKILL
...
推荐阅读
- javascript - 替换斜线之间的单词,但跳过第一次出现的单词
- python - 边界框的语义分割
- java - java中的价格提取
- chromium - 在 linux 上使用 update-alternatives 将 Chromium 设置为默认 Web 浏览器
- android - 如何处理不同大小的 RecyclerView 项目
- node.js - 用 socket io 连接两个 docker 容器
- apache - Htaccess 规则被覆盖
- spring-boot - spring-cloud-stream kafka 如何使用循环策略生成消息?
- npm - 重命名一个 npm 模块,对名称进行细微更改 => “包名太相似”
- python - Numpy 通过套接字串接导致解码错误