我想在presto的一列数组中找到最常见的元素。
例如...
col1
[A,B,C]
[A,B]
[A,D]
输出为...
col1 - col2
A - 3
B - 2
C - 1
D - 1
我已经尝试过使用flatten和nest。我可以使用
将其放入单个数组 select flatten(array_agg(col1))
from tablename;
但是我不确定如何根据不同的元素进行分组和计数。由于所需的大量内存,我也很难使它在我的所有数据上运行。 感谢您的帮助!
答案 0 :(得分:0)
您可以unnest()
进行汇总:
select u.col, count(*)
from t cross join
unnest(col1) u(col)
group by u.col;
答案 1 :(得分:0)
您可以使用 unnest()展平Array,然后分组依据对唯一值进行分组。
用于为您的案例生成数据集的查询。您可以在最终查询中用select命令替换此部分:
with dataset AS (
SELECT ARRAY[
ARRAY['A','B','C'],
ARRAY['A','B'],
ARRAY['A','D']
] AS data
)
select dt from dataset
CROSS JOIN UNNEST(data) AS t(dt)
O / P:
------
dt
------
[A,B,C]
------
[A,B]
------
[A,D]
现在,在最终查询中,我们将首先将这些数据展平以从所有行中删除所有值,然后将这些值分组以获取唯一值及其计数。
最终查询:
with da AS(
with dataset AS (
SELECT ARRAY[
ARRAY['A','B','C'],
ARRAY['A','B'],
ARRAY['A','D']
] AS data
)
select dt from dataset
CROSS JOIN UNNEST(data) AS t(dt)
)
select daVal,count(*) from da
CROSS JOIN UNNEST(dt) AS t(daVal)
GROUP BY daVal