【问题标题】:SQL query/Spark dataframe to outer join and subtract values of two tablesSQL 查询/Spark 数据框外连接和减去两个表的值
【发布时间】:2018-03-03 13:04:02
【问题描述】:

我希望根据“名称”对两个表 A 和 B 进行外部联接,然后减去列“计数”值,如果该行在另一个表中不存在,则替换为 0。有谁知道一个简单的 SQL 查询来实现这一点?

A
name count
ABC 10
DEF 10
GHI 20

B
name count
ABC 20
GHI 30
XYZ 10

RESULT
name count
ABC -10
DEF 10
GHI -10
XYZ -10

谢谢!

(或者如果有办法使用 Spark DataFrames 也可以做到这一点!)

【问题讨论】:

    标签: mysql sql apache-spark dataframe apache-spark-sql


    【解决方案1】:

    使用spark,您可以连接name 列上的两个数据框,coalescenull 计数为零,然后用B.count 减去A.count

    (A.alias("a").join(B.alias("b"), Seq("name"), "outer")
      .selectExpr("name", "coalesce(a.count, 0) - coalesce(b.count, 0) as count")).show
    +----+-----+
    |name|count|
    +----+-----+
    | DEF|   10|
    | GHI|  -10|
    | XYZ|  -10|
    | ABC|  -10|
    +----+-----+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      相关资源
      最近更新 更多