如何解决如何根据另一列的聚合获得一列的相应值?
我正在将一些 Postgresql 查询迁移到 SNowflake,并且正在努力复制以下查询:
WITH test_table(col1,col2,col3,col4) AS (
VALUES
(1,1,7,5),(1,6,4),2,3,6)
)
SELECT
col1,(max(ARRAY[col3,col4]))[2]
FROM test_table
GROUP BY 1,2
此查询设法获取对应于 col4
最大值的 col3 grouped by col1,col2
值。但是,我没有找到任何优雅的解决方案来在 SNowflake 上复制它。
解决方法
您可以按任何顺序聚合数组。因此,您可以按 col3
对 col4
进行分组:
with test_table(col1,col2,col3,col4)
as (
select * from (values
(1,1,20,1),-- added
(1,7,5),(1,6,4),2,3,6))
)
SELECT
col1,array_agg(col4) within group(order by col3 desc) c4_by_max_c3
FROM test_table
GROUP BY 1,2
您可以使用 [0]
选择顶部的数字,而不是获取此数组:
SELECT
col1,array_agg(col4) within group(order by col3 desc)[0] c4_by_max_c3
FROM test_table
GROUP BY 1,2
希望 Snowflake 将来也能支持 max_by
,但尚未实现。同时这会起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。