4

我正在将一些 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对应于 的最大值 的值col3 grouped by col1, col2。但是,我没有找到任何优雅的解决方案来在雪花上复制它。

4

1 回答 1

3

您可以按任何顺序聚合数组。因此,您可以col3按以下顺序分组col4

with test_table(col1, col2, col3, col4) 
as (
    select * from (values 
        (1, 1, 20, 1), -- added 
        (1, 1, 7, 5),
        (1, 1, 6, 4),
        (1, 2, 1, 4),
        (1, 2, 2, 5),
        (1, 2, 3, 6))
)

SELECT
    col1,
    col2,
    array_agg(col4) within group(order by col3 desc) c4_by_max_c3
FROM test_table
GROUP BY 1, 2

在此处输入图像描述

而不是得到这个数组,你可以选择顶部的数字[0]

SELECT
    col1,
    col2,
    array_agg(col4) within group(order by col3 desc)[0] c4_by_max_c3
FROM test_table
GROUP BY 1, 2

在此处输入图像描述

希望 Snowflake 将来也能支持max_by,但尚未实施。同时这将起作用。

于 2021-01-26T19:33:22.990 回答