如果我有如下表,如何获取第 2 列数组中唯一值计数的映射?
| ID | 第1栏 | 第2栏 |
|---|---|---|
| 1 | 10 | [一、一、二、三] |
| 2 | 12 | [一、一、一] |
我想要如下的东西:
| ID | 第1栏 | 第2栏 |
|---|---|---|
| 1 | 10 | {a:2,b:1,c:1} |
| 2 | 12 | {一:3} |
我尝试使用 Presto[histogram][1]来实现此目的。但它是一个聚合函数,需要group by. 我需要histogram对每一行而不是整个表使用。
例如,
SELECT distinct ID,
histogram(column1) AS column1,
column2
FROM table
Run Code Online (Sandbox Code Playgroud)
回报
'"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
Run Code Online (Sandbox Code Playgroud)
结果:
| ID | 第1栏 | 第2栏 |
|---|---|---|
| 1 | 10 | {a=2, b=1, c=1} |
| 2 | 12 | {a=3} |