我只是注意到以下查询:
select min(null,0);
返回null
,而我期望获得0
...(max
功能相同(
在文档中说,如果仅比较零值,则min((将返回null。有人可以解释我如何忽略零值,以获取与空相比的实际值?
用作 gentregate 函数时MIN
和用作A scalarar 函数的CC_5之间存在差异。MIN
作为汇总函数肯定会忽略NULL
值(大多数聚合功能也是如此(。这意味着以下列的最小值为3:
col
NULL
3
NULL
但是,SQLITE也提供MIN
作为A scalial 功能。忽略 NULL
值的一种方法是将这样的零值合并为最大的整数 9223372036854775807
,例如
SELECT MIN(COALESCE(col1, 9223372036854775807),
COALESCE(col2, 9223372036854775807),
COALESCE(col3, 9223372036854775807)) AS min_value
FROM yourTable;
在这里,如果一个值为 NULL
,则我们用一个非常大的值替换它,然后将其替换为最小的数字。如果您可能将所有列是NULL
,则可以用CASE
表达式将上述呼叫包装到MIN
。
您可以尝试。
select IFNULL(MIN(NULL),0)
select IFNULL(MAX(NULL),0)
ifnull文档
sqlfiddle