Jag*_*rab 4 hadoop hive case hiveql
好的,我有一个以下代码来标记具有二进制标志的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;
Run Code Online (Sandbox Code Playgroud)
对我来说似乎很直接,但它返回的结果是:
month_cd max_month_cd test_1 test_2
201610 null 1 1
201611 201611 1 1
Run Code Online (Sandbox Code Playgroud)
对我来说没有任何意义,而且似乎太明显了,不能成为执行引擎中的错误.我错过了什么?
lef*_*oin 10
这都是关于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
Run Code Online (Sandbox Code Playgroud)
请参阅此参考:Null(SQL)
| 归档时间: |
|
| 查看次数: |
59614 次 |
| 最近记录: |