[英]Joining multiple tables multiple ways
我有 5 个如下表:表 A
秩。 | 输入。 |
---|---|
0。 | 啊 |
1. | bb |
2 | 抄送 |
3 | dd |
表 B
秩。 | 输入。 |
---|---|
0。 | 啊 |
3 | 抄送 |
4 | dd |
5 | ee |
表C
秩。 | 输入。 |
---|---|
0。 | 啊 |
5 | ee |
6 | ff |
7 | gg |
表 D
秩。 | 输入。 |
---|---|
0。 | 啊 |
2 | bb |
6 | ff |
7 | gg |
我需要 output 如下所示:
决赛桌
秩。 | 输入。 |
---|---|
0。 | 啊 |
2 | bb |
3 | 抄送 |
5 | ee |
6 | ff |
7 | gg |
如果我只是根据最大的表交叉连接所有表,我会得到以下 output:
秩。 | 输入。 |
---|---|
0。 | 啊 |
有没有办法获得我想要的 output 而无需跨 AB、BC、CD、BD 等进行多次连接。
请告诉我。 我可以使用 SQL 或 Pyspark 来执行此操作。 任何建议,将不胜感激。
您可以合并所有表,按输入分组并获得排名的最大值:
select max(`rank`) as `rank`, input
from (
select * from tableA
union all
select * from tableB
union all
select * from tableC
union all
select * from tableD
) t
group by input
在 Pyspark 它将是
from functools import reduce
df = reduce(lambda a, b: a.unionAll(b), [tableA,tableB,tableC,tableD])
result = df.groupBy('input').agg(F.max('rank').alias('rank'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.