我正在尝试编写一个简短的 SQL 查询(在 MySQL Workbench 中),如果不止一个学生不及格,它会输出不及格的次数。
这是我的尝试:
SELECT CONCAT(area, yearlevel, code) AS SubjectCode, Count(student)
FROM StudentTakesSubject
WHERE result < 50 AND result <> NULL
GROUP BY code
HAVING Count(Student) > 1;
问题是它一直输出包含 Null 记录的计数,即使我在查询中指定不对它们进行计数(或者至少我认为我做了...)。
编辑:
是 GROUP BY
子句出了问题!正如 Gordon Linoff 在他的回答中指出的那样,应该是 GROUP BY SubjectCode
并且神奇地解决了问题。
感谢大家的建设性见解。
最佳答案
如上所写:
SELECT CONCAT(area, yearlevel, code) AS SubjectCode, Count(student)
FROM StudentTakesSubject
WHERE result < 50 AND result <> NULL
GROUP BY code
HAVING Count(Student) > 1;
此查询不应返回任何行。为什么? result <> NULL
返回 NULL
作为 bool 值(接近所有与 NULL
的比较返回 NULL
)。 AND NULL
评估 NULL
-- 和 NULL
不是真的。过滤掉所有行。
NULL
比较其实是多余的。 result < 50
也会过滤掉NULL
值(value)观。
查看查询的其余部分,您遇到了另一个问题。 GROUP BY
在code
.它真的应该在 SubjectCode
上-- CONCAT()
的结果.事实上,当连接不同的列时,我建议使用分隔符,比如 CONCAT_WS(':', area, yearlevel, code)
.当然,对于这种特殊情况,可能不需要分隔符。
关于mysql - SQL IS NOT NULL 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527050/