Google bigquery 如何在大查询中使用不忽略空值的where语句
我有点惊讶地发现Google Big Query中的WHERE语句忽略了空值。有人知道更好的方法吗 我有以下数据集:Google bigquery 如何在大查询中使用不忽略空值的where语句,google-bigquery,Google Bigquery,我有点惊讶地发现Google Big Query中的WHERE语句忽略了空值。有人知道更好的方法吗 我有以下数据集: Name Score Allan 20 Brian NULL Clare 30 假设我要选择分数不等于20的所有记录。如果我在大查询中使用以下代码 SELECT * FROM [....] where Score <> 20 问题是Brian的记录为空也不等于20,因此应该出现在我的结果中 除了专门
Name Score
Allan 20
Brian NULL
Clare 30
假设我要选择分数不等于20的所有记录。如果我在大查询中使用以下代码
SELECT * FROM [....]
where
Score <> 20
问题是Brian的记录为空也不等于20,因此应该出现在我的结果中
除了专门检查空值,还有更好的方法吗
谢谢
Ria你如何通过-
SELECT * FROM [....]
where
Score <> 20 or Scrore is NULL
从[…]中选择*
哪里
分数20或Scrore为空
有什么有效的方法吗-
为了避免这种破坏性能的方式,我们应该将列属性保持为notnull
SQL(因此,类似SQL的BigQuery具有三价逻辑)。归根结底,语句不能是真的或假的,它们也可以是空的。在本例中,语句NULL 20既不是TRUE也不是FALSE,它本身就是NULL。将空值视为未知值可能会有所帮助。因为我们不知道布赖恩的年龄,我们不知道它是否等于20岁。但是查询只返回where子句计算结果为TRUE的行,因此不包括包含BRAIN的行
如果希望包含空值,则必须显式写入
where (Score <> 20 or Score is null)
其中(分数20或分数为空)
从[…]中选择*
其中合并(分数,0)20
还有一个变体:
从[…]中选择*
其中ifnull(分数20,真)
我有点喜欢用它来表达“从这个表达式中接受TRUE或NULL布尔值;拒绝FALSE。”您是否在(20)中尝试了NOT?对
NULL
返回NULL
(这不是TRUE
)。自己试试:选择空20
将给出NULL
。这是SQL的正常标准行为,所有主要的关系数据库都会这样做。ifnull(score,0)
对我来说比coalesce
更有意义,因为coalesce
接受第一个非null参数,而ifnull
在参数为null的情况下提供默认值。这样做很好。非常感谢。
where (Score <> 20 or Score is null)
select * from [...]
where coalesce(score, 0) <> 20