如何根据另一列有条件地聚合一列
Posted
技术标签:
【中文标题】如何根据另一列有条件地聚合一列【英文标题】: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
,并且希望每次都输出到不同的数组
【问题讨论】:
【参考方案1】:您可以将ARRAY_AGG
与IGNORE NULLS
一起使用,例如:
ARRAY_AGG(IF(someBool IS NOT TRUE, NULL, someId) IGNORE NULLS)
这只会聚合someBool
为真的ID。如果您要在条件中使用多个布尔列,您可以将它们AND
一起使用,或者使用CASE WHEN ...
或任何其他类型的条件来生成NULL
以排除某个值。
【讨论】:
谢谢你做得很完美!以上是关于如何根据另一列有条件地聚合一列的主要内容,如果未能解决你的问题,请参考以下文章