我正在设置一个基于表中另一个字段的字段:
count(case
when recipient_status = 'Premium' and
delivered_in_estimated_time_window <> false
then 1 end)
如果我得到一个值delivered_in_estimated_time_window
作为null
,我想计数它,只有当值为false时,我才不想计数它。例如,如果一行看起来像这样:
recipient_status | delivered_in_estimated_time_window
'Premium' | null
那么我想加到count 1。只有当一行看起来像下面这样时,我才不想计数:
recipient_status | delivered_in_estimated_time_window
'Premium' | false
但是,这似乎不包括null
字段。为什么<> false
不为null
值工作?
NULL
不是真或假,它什么都不是,因此你不能检查它是真还是假。如果您希望NULL
的值像true一样,您可以使用COALESCE
将NULL
的值替换为true:
...COALESCE(delivered_in_estimated_time_window,true) <> false...
那么,你的示例将是:
COUNT(CASE
WHEN recipient_status = 'Premium' AND
COALESCE(delivered_in_estimated_time_window,true) <> false
THEN 1 END)
COUNT(
CASE WHEN recipient_status='Premium' AND
IFNULL(delivered_in_estimated_time_window, true) <> false
THEN 1
END
)
如上所述,NULL
是"特殊的":它不等于或不等于其他任何东西,它只是NULL
。将内容包装在IFNULL
或COALESCE
中,或者像上面建议的那样添加包括IS (NOT) NULL
在内的更多条件。