mysql - 尽管使用 IFNULL (MySQL),SQL 查询也不返回 NULL 值

标签 mysql sql

我设置了一个测试表:Table Rows setup

我的目标是尝试获取在当前部门之前建立的部门的数量。我的 SQL 是:

SELECT A.Department, IFNULL(COUNT(*), 0) 
FROM Departments A
INNER JOIN Departments B ON B.YearOfEstablishment < A.YearOfEstablishment
GROUP BY Department
ORDER BY COUNT(*);

但是我尝试了LEFT JOININNER JOIN,最后一个部门是最先找到的never 被返回,因为我可以假设它是空的。尽管有 IFNULL,但部门并未显示。

我在这里做错了什么?

最佳答案

我认为这是您需要的查询:

SELECT A.Department, COUNT(B.Department)
FROM Departments A
LEFT JOIN Departments B ON B.YearOfEstablishment < A.YearOfEstablishment
GROUP BY A.Department
ORDER BY 2;

参见this db fiddle demo

| Department        | cnt |
| ----------------- | --- |
| Office Management | 0   |
| Business          | 1   |
| Sales Management  | 2   |
| ComputerScience   | 3   |
| Liberal Arts      | 4   |
| Farming           | 4   |
| Communications    | 6   |
| Digital Science   | 7   |

注意:正如 @fifonik 所评论的,不需要 IFNULL,因为当没有可用记录时 COUNT 已经返回 0

关于mysql - 尽管使用 IFNULL (MySQL),SQL 查询也不返回 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54508346/

相关文章:

sql - 无法绑定(bind)多部分标识符 - 子查询

mysql - nodejs 如何用 2 条语句执行 mysql 查询

从多个表中删除时MySQL查询问题

php - SQL 表可以有符号链接(symbolic link)或别名吗?

php - 使用 php mysql 时出错未终止的字符串文字?

Python/MySQLdb 从 CSV 导入数据封装

javascript - Node .js + mysql : "Cannot enqueue Handshake after already enqueuing a Handshake."

mysql - 如何使用命令行中的连接参数在 groovy 中连接 mysql 数据库?

mysql - 使用 MySQL 将 Unix 时间戳转换为人类可读的日期

php - 为什么代码没有进入 `if`子句?