如何在 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."
我有点惊讶地发现 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."