gpt4 book ai didi

sql - Hive 中的 CASE 语句

转载 作者:可可西里 更新时间:2023-11-01 14:25:15 26 4
gpt4 key购买 nike

好的,我有以下代码用二进制标志标记 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 NULLIS 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com