在 Presto SQL 中如何创建数组值及其计数的映射
In Presto SQL how to create a map of array values and its count
如果我有如下所示的 table,我如何获取第 2 列中数组中唯一值计数的映射?
ID
Column1
Column2
1
10
[a, a, b, c]
2
12
[a, a, a]
我想要如下内容:
ID
Column1
Column2
1
10
{a: 2, b: 1, c: 1}
2
12
{a: 3}
我尝试为此使用 Presto 的 [histogram][1]
。但它是一个聚合函数,需要group by
。我需要为每一行使用 histogram
而不是整个 table.
例如,
SELECT distinct ID,
histogram(column1) AS column1,
column2
FROM table
returns
'"ID"' must be an aggregate expression or appear in GROUP BY clause
您可以使用 unnest
将数组扩展为一列,然后在这个新列上使用 histogram
:
WITH dataset AS (
SELECT *
FROM (
VALUES (1, 10, ARRAY['a', 'a', 'b', 'c']),
(2, 12, ARRAY['a', 'a', 'a'])
) AS t (ID, Column1, Column2))
SELECT
ID, Column1, histogram(Col2) as Column2
FROM
dataset
CROSS JOIN unnest(Column2) as t(Col2)
GROUP BY ID, Column1
结果:
ID
Column1
Column2
1
10
{a=2, b=1, c=1}
2
12
{a=3}
如果我有如下所示的 table,我如何获取第 2 列中数组中唯一值计数的映射?
ID | Column1 | Column2 |
---|---|---|
1 | 10 | [a, a, b, c] |
2 | 12 | [a, a, a] |
我想要如下内容:
ID | Column1 | Column2 |
---|---|---|
1 | 10 | {a: 2, b: 1, c: 1} |
2 | 12 | {a: 3} |
我尝试为此使用 Presto 的 [histogram][1]
。但它是一个聚合函数,需要group by
。我需要为每一行使用 histogram
而不是整个 table.
例如,
SELECT distinct ID,
histogram(column1) AS column1,
column2
FROM table
returns
'"ID"' must be an aggregate expression or appear in GROUP BY clause
您可以使用 unnest
将数组扩展为一列,然后在这个新列上使用 histogram
:
WITH dataset AS (
SELECT *
FROM (
VALUES (1, 10, ARRAY['a', 'a', 'b', 'c']),
(2, 12, ARRAY['a', 'a', 'a'])
) AS t (ID, Column1, Column2))
SELECT
ID, Column1, histogram(Col2) as Column2
FROM
dataset
CROSS JOIN unnest(Column2) as t(Col2)
GROUP BY ID, Column1
结果:
ID | Column1 | Column2 |
---|---|---|
1 | 10 | {a=2, b=1, c=1} |
2 | 12 | {a=3} |