SQL(Redshift)获取多个表的交集

Posted

技术标签:

【中文标题】SQL(Redshift)获取多个表的交集【英文标题】:SQL (Redshift) to get the intersect of multiple tables 【发布时间】:2017-09-27 12:25:58 【问题描述】:

我正在使用 Redshift 并有 6 个 ID 表。我想获得每个表之间的交集。

所以我的最终输出看起来像这样:

表 1 和表 2 有 10% 的公共 ID 表 1 和表 3 有 50% 的公共 ID ..... ..... 表 6 和表 4 有 20% 的公共 ID 表 6 和表 5 有 3% 的公共 ID

我可以轻松获取数据,但是会重复很多相同的 SQL,因此我尝试创建一些包含所有 ID 的表和它们所在的表,但我不知道要获取什么一两个 SQL 中的数据。

欢迎任何想法!

【问题讨论】:

【参考方案1】:

您可以尝试在子查询中按 ID 完全连接所有这些表,然后使用条件聚合,以便 Table 1 & Table 2 have 10% common IDs 表示为

100.0*sum(case when id1 is not null and id2 is not null then 1 end)/count(id1)

(以表1行数为分母)

【讨论】:

谢谢,我最后就是这么做的

以上是关于SQL(Redshift)获取多个表的交集的主要内容,如果未能解决你的问题,请参考以下文章

将SQL表的两次查询结果作求交运算

mysql两表汇总后再得到两表的交集和差集,请问怎么实现?

Redshift 中的链式 CTE - 我如何知道 CTE 将继承哪个 DIST KEY?

sql求两表的并集交集非交集差集结果集排序

在 Redshift sql 查询中选择表的顶部/底部 50%

SQL中两个表的交集