【问题标题】:Joining multiple tables multiple ways以多种方式连接多个表
【发布时间】:2021-04-14 12:06:52
【问题描述】:

我有 5 个表格,如下所示: 表A

rank. input.
0. aa
1. bb
2 cc
3 dd ​

表 B

rank. input.
0. aa
3 cc
4 dd
5 ee ​

表 C

rank. input.
0. aa
5 ee
6 ff
7 gg ​

表 D

rank. input.
0. aa
2 bb
6 ff
7 gg ​

我需要输出如下:

决赛桌

rank. input.
0. aa
2 bb
3 cc
5 ee ​
6 ff
7 gg ​

如果我只是根据最大的表交叉连接所有表,我会得到以下输出:

rank. input.
0. aa

有没有一种方法可以获得我想要的输出,而无需跨 AB、BC、CD、BD 等进行多次连接。

请告诉我。我可以使用 SQL 或 Pyspark 来执行此操作。任何建议将不胜感激。

【问题讨论】:

  • 样本表数据很好,但您也应该指定预期结果。并向我们​​展示您当前的查询尝试。

标签: python sql join pyspark amazon-athena


【解决方案1】:

您可以合并所有表,按输入分组并获得最大排名:

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2023-03-26
    • 1970-01-01
    • 2016-12-09
    • 2020-07-27
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多