【问题标题】:Snowflake - PIVOT rows to get distinct/unique arraysSnowflake - PIVOT 行以获得不同/唯一的数组
【发布时间】:2022-08-04 16:01:24
【问题描述】:

灵感来自Adrian\'s answer 我想知道是否可以使用PIVOT 来产生组合和独特的值列表。

旁注:ARRAY_AGG 未列在 PIVOT 的文档中。

样本数据:

CREATE OR REPLACE TABLE test_data(studentid INT, grade TEXT, month TEXT /*columns*/)
AS SELECT * FROM VALUES
    (1, \'A\', \'JAN\'),
    (1, \'A\', \'JAN\'),
    (2, \'C\', \'JAN\'),
    (2, \'D\', \'JAN\'),
    (2, \'D\', \'JAN\'),
    (1, \'B\', \'FEB\'),
    (1, \'B\', \'FEB\'),
    (2, \'F\', \'FEB\'),
    (2, \'E\', \'FEB\'),
    (1, \'B\', \'MAR\'),
    (1, \'B\', \'MAR\'),
    (2, \'A\', \'MAR\'),
    (2, \'B\', \'MAR\');
    

使用枢轴:

SELECT *
FROM test_data
PIVOT (ARRAY_AGG(grade) FOR month IN (\'JAN\', \'FEB\', \'MAR\')) AS p;

输出:

STUDENTID \'JAN\' \'FEB\' \'MAR\'
1 [ \"A\", \"A\" ] [ \"B\", \"B\" ] [ \"B\", \"B\" ]
2 [ \"C\", \"D\", \"D\" ] [ \"F\", \"E\" ] [ \"A\", \"B\" ]

所需的输出不应包含数组内的重复项。使用 DISTINCT 关键字会产生以下错误:

SELECT *
FROM test_data
PIVOT (ARRAY_AGG(DISTINCT grade) FOR month IN (\'JAN\', \'FEB\', \'MAR\')) AS p;

语法错误:意外 \'DISTINCT\'

    标签: pivot snowflake-cloud-data-platform


    【解决方案1】:

    事实证明,可以使用recently introduced function 来实现它

    ARRAY_UNQIUE_AGG:

    返回一个包含指定列中所有不同值的 ARRAY。

    代码:

    SELECT *
    FROM test_data
    PIVOT (ARRAY_UNIQUE_AGG(grade) FOR month IN ('JAN', 'FEB', 'MAR')) AS p;
    

    输出:

    STUDENTID 'JAN' 'FEB' 'MAR'
    1 [ "A", ] [ "B" ] [ "B" ]
    2 [ "C", "D",] [ "F", "E" ] [ "A", "B" ]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多