好的,我有以下代码用二进制标志标记 tabl 中具有最高 month_cd 的记录:
Select t1.month_cd, t2.max_month_cd
,CASE WHEN t2.max_month_cd != null then 0 else 1 end test_1
,CASE WHEN t2.max_month_cd = null then 0 else 1 end test_2
from source t1
Left join (
Select
MAX(month_cd) as max_month_cd
From source
) t2
on t1.month_cd = t2.max_month_cd;
这对我来说似乎很直接,但返回的结果是:
month_cd max_month_cd test_1 test_2
201610 null 1 1
201611 201611 1 1
对我来说意义为零,而且似乎太明显了,不可能成为执行引擎中的错误。我错过了什么?
最佳答案
这都是关于 NULL 概念的。
由于 Null 不是任何数据域的成员,因此它不被视为“值”,而是表示值不存在的标记。因此,与 Null 的比较永远不会产生 True 或 False,而总是产生第三个逻辑结果 Unknown。 NULL 什么都不是,没有对象。所以,没有什么不能等于 NULL 或其他东西。在 SQL 中,有 IS NULL
和 IS NOT NULL
条件可用于测试空值。
在您的 CASE 中,逻辑表达式的结果是未知的,因此分配了 ELSE 值。
更正版本:
CASE WHEN t2.max_month_cd IS NOT null then 0 else 1 end test_1,
CASE WHEN t2.max_month_cd IS null then 0 else 1 end test_2
引用:Null (SQL)
关于sql - Hive 中的 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023835/