Sql 如何基于另一列的聚合来获取该列的相应值?

Sql 如何基于另一列的聚合来获取该列的相应值?,sql,greatest-n-per-group,snowflake-cloud-data-platform,maxby,Sql,Greatest N Per Group,Snowflake Cloud Data Platform,Maxby,我正在将一些PostgreSQL查询迁移到Snowflake,我正在努力复制以下查询: WITH test_table(col1, col2, col3, col4) AS ( VALUES (1, 1, 7, 5), (1, 1, 6, 4), (1, 2, 1, 4), (1, 2, 2, 5), (1, 2, 3, 6) ) SELECT col1, col2, (max(A

我正在将一些PostgreSQL查询迁移到Snowflake,我正在努力复制以下查询:

WITH test_table(col1, col2, col3, col4) AS (
    VALUES 
        (1, 1, 7, 5),
        (1, 1, 6, 4),
        (1, 2, 1, 4),
        (1, 2, 2, 5),
        (1, 2, 3, 6)
)

SELECT
    col1,
    col2,
    (max(ARRAY[col3, col4]))[2]
FROM test_table
GROUP BY 1, 2

此查询设法获取col4的值,该值对应于按col1、col2分组的col3的最大值。但是,我找不到任何优雅的解决方案来在Snowflake上复制它。

您可以按任何顺序聚合数组。因此,您可以按col4对col3进行分组:

使用测试表COL1、col2、col3、col4 像 从值中选择* 1,1,20,1,-添加 1, 1, 7, 5, 1, 1, 6, 4, 1, 2, 1, 4, 1, 2, 2, 5, 1, 2, 3, 6 选择 col1, col2, 数组\u aggcol4在grouporder中按col3 desc c4\u按\u max\u c3 从测试表 分组1,2 您不必获取此数组,只需使用[0]选择最前面的数字即可:

选择 col1, col2, 数组\u aggcol4在grouporder中按col3 desc[0]c4\u按\u max\u c3 从测试表 分组1,2
希望Snowflake将来也能支持max_by,但它还没有实现。同时,这也会起作用。

请添加一些示例源数据,让每个人都可以轻松复制您的结果。效果很好!谢谢