我设置了一个测试表: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 JOIN
和INNER 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;
| 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/