如何在 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;
但是如果涉及的行太多,这可能会变慢并且失败。
如何在 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;
但是如果涉及的行太多,这可能会变慢并且失败。