如何在 Big Query 中使用不忽略空值的 where 语句

How to use a where statement that does not ignore Nulls in Big Query

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

我有以下数据集:

Name     Score
Allan     20           
Brian     NULL
Clare     30

说我想select所有Score不等于20的记录。如果我在Big Query中使用下面的代码

SELECT * FROM [....] 

where
    Score <> 20

结果如下:

Name  Score
Clare   30

问题是 Brian 的 NULL 记录也不等于 20,因此应该在我的结果中。

除了专门检查 NULLS 之外还有更好的方法吗?

谢谢 里亚

如何通过-

实现
SELECT * FROM [....] 

where
    Score <> 20 or Scrore is NULL

有什么有效的方法-

为避免这种性能下降方式,我们应该将列 属性 保留为 not null

SQL(因此类似于 SQL 的 BigQuery)具有三价逻辑。归结起来就是语句不能只是 TRUE 或 FALSE,它们也可以是 NULL。在这种情况下,语句 NULL <> 20 既不是 TRUE 也不是 FALSE,它本身是 NULL。将 NULL 值视为未知值可能会有所帮助。由于我们不知道 Brian 的年龄,因此我们不知道它是否等于 20。但是查询仅 returns 行 where 子句的计算结果为 TRUE,因此排除了包含 Brian 的行。

如果你想包含 NULL 值,你必须明确地写

where (Score <> 20 or Score is null)
select * from [...]
where coalesce(score, 0) <> 20

还有一个变体:

SELECT * 来自 [...] WHERE ifnull(分数 <> 20,真)

我有点喜欢用它来表达"accept either TRUE or NULL boolean values from this expression; reject FALSE."