我尝试用mysql执行以下查询(应该添加更多条件,但为问题简化了,所以子查询有时会返回null,有时会返回值,这只是为了使问题的查询更短):
SELECT COUNT(*)
FROM table
WHERE date = (SELECT MAX(date) FROM table)
我的问题是,如果子查询返回null,我的结果将为0,这不是所需的结果。
由于我不能IS
而不是=
,我想知道是否有一个简单的解决方案。
答案 0 :(得分:4)
MySQL提供NULL安全等式比较 <=>
(太空飞船)操作符。
我怀疑如果将 =
等式比较运算符替换为NULL安全等式比较运算符,查询将返回它看起来像你所追求的结果。
这个表达式:
a <=> b
基本上是简写等同于:
a = b OR ( a IS NULL AND b IS NULL )
答案 1 :(得分:0)
要计算所有具有空日期的行,这应该有效:
SELECT COUNT(*) FROM table WHERE date IS NULL;
答案 2 :(得分:0)
这不应该是一个问题。
如果没有行或者所有行中的date都为NULL,则子查询仅返回NULL。
在这种情况下,查询将返回0。这对我来说很有意义。你想要它返回什么?
答案 3 :(得分:0)
您可以将两个结果组合在一起并计算最大值:
SELECT MAX(datecount) FROM
(SELECT COUNT(*) AS datecount FROM table WHERE date IS NULL
UNION ALL
SELECT COUNT(*) AS datecount FROM table WHERE date = (SELECT MAX(date) FROM table)) AS derivedtable