mysql - SQL IS NOT NULL 不工作

标签 mysql sql mysql-workbench

我正在尝试编写一个简短的 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 BYcode .它真的应该在 SubjectCode 上-- CONCAT() 的结果.事实上,当连接不同的列时,我建议使用分隔符,比如 CONCAT_WS(':', area, yearlevel, code) .当然,对于这种特殊情况,可能不需要分隔符。

关于mysql - SQL IS NOT NULL 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527050/

相关文章:

php - 重复事件

c# - MySql 语法错误 : You have an error in your SQL syntax near '' at line 1

mysql - 从所有表的 MySQL 数据库中删除所有零日期

mysql - 如何在mysql中显示分组依据?

MYSQL - 如何让3行数据变成1行数据

mysql - 按周分组结果

mysql - 如何获取每个产品/进入日期最近 4 周的数据

sql - 雪花问题: Using the RANK () Windows Function in SQL- where the column you want to order by isn't ordinal

mysql - before update 触发器生成哈希的语法

mysql - 空间/全文/哈希索引和 MySQL 8.0.11 上的显式索引顺序使用不正确