如何在 aggregate/GROUP BY 查询中 return 任何 NON-NULL 值?

How can I return any NON-NULL value in an aggregate/GROUP BY query?

如何在 Snowflake 的 aggregate/GROUP BY SQL 查询中 return 任何非空值?

连同来自 table 的其他信息,我想获取数据中可能为空的 user_id 属性的任意值(但仍会拉入该属性为空的行.) 我怎样才能为该属性获取一个不会是空值之一的值?

我想这样做以避免属性值的计算成本更高(我假设)MIN/MAX 路由。

我想做类似的事情 SELECT user_id, ANY_VALUE(attribute) IGNORE NULLS FROM foo 但似乎不支持 IGNORE NULLS,例如 FIRST_VALUE()。

如果您的目标是提高性能,我会听从 Simeon 的建议 MAX() — 它应该很快。

如果你想要一些 SQL 语法来只获取第一个非空元素 array_agg()[0] 可以让你做到这一点 - 因为 array_agg() 忽略空值:

with data as ( 
    select 'a' label,  i from values (1),(2),(3),(null)
)

select label, array_agg(i)[0]
from data
group by label;

但是如果涉及的行太多,这可能会变慢并且失败。