Google bigquery 如何在大查询中使用不忽略空值的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,因此应该出现在我的结果中 除了专门

我有点惊讶地发现Google Big Query中的WHERE语句忽略了空值。有人知道更好的方法吗

我有以下数据集:

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