Presto - 如何在一个查询中对所有列之间执行关联



>我有一个以下格式的表格:

A   B   C   D 
7   7   2   12
2   2   3   4
2   2   2   4
2   2   2   3
5   5   2   7

我想使用内置的相关函数(https://prestodb.io/docs/current/functions/aggregate.html corr(y, x( →双精度(计算每列之间的相关性

我可以运行所有列并每次使用以下方法执行 corr 计算:select corr(A,B) from table但我想减少我访问 presto 的次数,并在可能的情况下在一个查询中运行它。

是否有可能因此获得通过某个阈值的列名,或者至少获得一个查询中所有可能组合之间的相关分数?

谢谢。

我想

计算每列之间的相关性

关联涉及两个数据系列(在 SQL 中为两列(。所以我把你的问题理解为:如何计算表中每个可能的列组合的相关性。那看起来像:

select
corr(a, b) corr_a_b,
corr(a, c) corr_a_c,
corr(a, d) corr_a_d,
corr(b, c) corr_b_c,
corr(b, d) corr_c_d,
corr(c, d) corr_c_d
from mytable

您可以使用横向联接来取消表透视,然后使用自联接和聚合:

with v as (
select v.*, t.id
from (select t.*,
row_number() over (order by a) as id
from t
) t cross join lateral
(values ('a', a), ('b', b), ('c', c), ('d', d)
) v(col, val)
)
select v1.col, v2.col, corr(v1.val, v2.val)
from v v1 join
v v2
on v1.id = v2.id and v1.which < v2.which
group by v1.col, v2.col;

row_number()只是为每一行生成一个唯一的 id,然后将其用于自联接。 您可能已经有包含此信息的列,因此可能没有必要。

相关内容

  • 没有找到相关文章

最新更新