2Xc*_*ion 2 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;
Run Code Online (Sandbox Code Playgroud)
问题是它保持输出包含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;
Run Code Online (Sandbox Code Playgroud)
此查询不应返回任何行.为什么? result <> NULL返回NULL一个布尔值(接近所有比较NULL返回NULL).AND NULL评估NULL- 而NULL不是真的.所有行都被过滤掉了.
这种NULL比较实际上是多余的.这result < 50也将过滤掉NULL值.
查看查询的其余部分,您还有另一个问题.的GROUP BY是code.它应该真的在SubjectCode- 结果CONCAT().事实上,当连接不同的列时,我建议使用分隔符CONCAT_WS(':', area, yearlevel, code).当然,对于这种特定情况,分离器可能不是所希望的.