SQL <> false 不返回空字段

SQL <> false not returning fields with null

我正在根据 table 中的另一个字段设置一个字段,并使用此检查:

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

那我想加1。 只有当一行看起来像下面的这一行时,我才不想计算它:

recipient_status | delivered_in_estimated_time_window
'Premium'        | false

但是,这似乎不包括 null 个字段。为什么 <> false 不适用于 null 值?

COUNT(
    CASE WHEN recipient_status='Premium' AND
              IFNULL(delivered_in_estimated_time_window, true) <> false 
         THEN 1 
    END
)

如上所述,NULL 是 'special':它不等于或不等于其他任何东西,它只是 NULL。按照上面的建议,用 IFNULLCOALESCE 包装内容或添加更多条件,包括 IS (NOT) NULL

NULL不是真假,什么都不是,所以你无法判断它是真是假。如果您希望 NULL 值表现得像 true,您可以使用 COALESCENULL 值替换为 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)