如何在标准 Bigquery 中使用 if-else 语句?
Posted
技术标签:
【中文标题】如何在标准 Bigquery 中使用 if-else 语句?【英文标题】:How to use if-else statement in Standard Bigquery? 【发布时间】:2019-12-11 04:03:07 【问题描述】:如果我有如下表格:
|**Entry**-------**Name**--------**Date**------------------**Boolean**|
| 1.-----------Car-----------2019-12-01----------True|
| 2.-----------Car-----------2019-12-03----------False|
| 3.-----------Bus-----------2019-12-05----------False|
| 4.-----------Bus-----------2019-12-11----------False|
如果 Boolean 列为 true,或者如果布尔值为 false,则我想选择具有不同 Name 的行,或者如果布尔值为 false,则选择日期最早的行。所以对于 car 条目我想选择第一行,因为它的布尔值是真的(所以我可以忽略所有其他条目)和 bus 条目我想要选择最后一行,因为它的两个布尔值都是错误的,所以我想选择最早的日期(最接近当前日期)。
编辑:预期输出
| 1.-----------汽车------------2019-12-01----------真| | 4.-----------公交车------------2019-12-11----------假|
【问题讨论】:
请添加更多数据,例如您的当前输出和预期输出。 如果还有另一行用于 TRUE 的 Car - 您会选择哪一行? 您的查询分为两部分,因此您可以分别为这两种情况编写查询并将它们合并。因为使用“CASE WHEN ...THEN..”作为单个查询写入每一列对于读者和作者来说都更加复杂。 car 和 true 只能是一排。所以这就是为什么当我们读取一行时我们选择它。如果它不是真的,那么我们看看日期。 【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY bool DESC, dt DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name
注意;这是基于您的评论中的“只有一排汽车和真实”...
如果应用到您的问题中的样本数据,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Car' name, '2019-12-01' dt, TRUE bool UNION ALL
SELECT 'Car', '2019-12-03', FALSE UNION ALL
SELECT 'Bus', '2019-12-05', FALSE UNION ALL
SELECT 'Bus', '2019-12-11', FALSE
)
SELECT AS VALUE ARRAY_AGG(t ORDER BY bool DESC, dt DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY name
结果是
Row name dt bool
1 Car 2019-12-01 true
2 Bus 2019-12-11 false
【讨论】:
以上是关于如何在标准 Bigquery 中使用 if-else 语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何在标准 Bigquery 中使用 if-else 语句?
如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?
如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?