【问题标题】:How to conditionally aggregate a column based on another如何根据另一列有条件地聚合一列
【发布时间】:2017-06-20 13:10:34
【问题描述】:

我的一行数据是这样的

[someId, someBool, someInt]

我正在寻找一种聚合 someInt 的方法(特别是将它们放在 array 中)。

我使用 GROUP BY 子句按someId 字段分组,然后我可以使用ARRAY_AGG 聚合所有someInt,但我只想包含someBool=TRUE 所在的行。如何以正确的方式解决这个问题?

PS:可能需要注意我得到了几个布尔值,例如 someBool,并且希望每次都输出到不同的数组

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以将ARRAY_AGGIGNORE NULLS 一起使用,例如:

    ARRAY_AGG(IF(someBool IS NOT TRUE, NULL, someId) IGNORE NULLS)
    

    这只会聚合someBool 为真的ID。如果您要在条件中使用多个布尔列,您可以将它们AND 一起使用,或者使用CASE WHEN ... 或任何其他类型的条件来生成NULL 以排除某个值。

    【讨论】:

    • 谢谢你做得很完美!
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2022-11-10
    • 2018-07-30
    相关资源
    最近更新 更多