SQLite 忽略 min 函数的空值
SQLite ignore null values for min function
我刚刚注意到以下查询:
select min(null,0);
returns null
而我期待得到 0
...(与 max
函数相同)
文档中说,如果只比较空值,min() 将 return 为空。有人可以解释我如何忽略 null 值以获得与 null 进行比较时的实际值吗?
你可以试试
select IFNULL(MIN(NULL),0)
select IFNULL(MAX(NULL),0)
用作聚合函数的MIN
与用作标量[=32]的MIN
之间存在差异=] 函数。 MIN
作为聚合函数当然会忽略 NULL
值(大多数聚合函数也是如此)。这意味着以下列的最小值是 3:
col
NULL
3
NULL
但是,SQLite 也提供 MIN
作为 标量 函数。此处忽略 NULL
值的一种方法是将此类空值合并为最大可能的整数值 9223372036854775807
,例如
SELECT MIN(COALESCE(col1, 9223372036854775807),
COALESCE(col2, 9223372036854775807),
COALESCE(col3, 9223372036854775807)) AS min_value
FROM yourTable;
这里如果一个值是 NULL
那么我们用一个非常大的值替换它,然后将它作为最小的数字考虑。如果您可能将所有列设为 NULL
,那么您可以使用 CASE
表达式包装上述对 MIN
的调用。
我刚刚注意到以下查询:
select min(null,0);
returns null
而我期待得到 0
...(与 max
函数相同)
文档中说,如果只比较空值,min() 将 return 为空。有人可以解释我如何忽略 null 值以获得与 null 进行比较时的实际值吗?
你可以试试
select IFNULL(MIN(NULL),0)
select IFNULL(MAX(NULL),0)
用作聚合函数的MIN
与用作标量[=32]的MIN
之间存在差异=] 函数。 MIN
作为聚合函数当然会忽略 NULL
值(大多数聚合函数也是如此)。这意味着以下列的最小值是 3:
col
NULL
3
NULL
但是,SQLite 也提供 MIN
作为 标量 函数。此处忽略 NULL
值的一种方法是将此类空值合并为最大可能的整数值 9223372036854775807
,例如
SELECT MIN(COALESCE(col1, 9223372036854775807),
COALESCE(col2, 9223372036854775807),
COALESCE(col3, 9223372036854775807)) AS min_value
FROM yourTable;
这里如果一个值是 NULL
那么我们用一个非常大的值替换它,然后将它作为最小的数字考虑。如果您可能将所有列设为 NULL
,那么您可以使用 CASE
表达式包装上述对 MIN
的调用。