如何根据另一列有条件地聚合一列

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_AGGIGNORE NULLS 一起使用,例如:

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

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

【讨论】:

谢谢你做得很完美!

以上是关于如何根据另一列有条件地聚合一列的主要内容,如果未能解决你的问题,请参考以下文章

sql一列有多值查询,根据多个只查询我想要的数据

如何根据另一列的条件查询同一列两次?

如何根据另一列中的单元格值有条件地填充熊猫列

SQL根据条件将值从一列复制到另一列

PySpark DataFrame 根据另一列中时间戳值的最小/最大条件更新列值

如何按顺序提取EXCEL里其中一列数据(符合指定条件的)依次显示在另一列里