mysql - SQL 查询/Spark 数据帧外连接并减去两个表的值

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

我希望根据“名称”对两个表 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 来做到这一点,那就太好了!)

最佳答案

使用 spark,您可以在 name 列上连接两个数据框,coalesce null 计数为零然后用 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|
+----+-----+

关于mysql - SQL 查询/Spark 数据帧外连接并减去两个表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46356438/

相关文章:

php - 提取表中与 Codeigniter Active Record 具有相同值的记录计数

mysql 连接查询 - QUERY

java - 如何获取没有别名的hibernate生成的sql

scala - 如何为 scala Iterable、spark 数据集制作编码器

python - PySpark - Spark DataFrame 数组与 Python 列表不同吗?

php - 在php中制作加法表和乘法表。

mysql - 使用 MySqlCommand..Parameters.Add(New MySqlParameter ("@sampleVariable", sampleVariable) 时如何查看参数内部的内容

mysql - 如何删除mysql中的 '\\'条目

sql - 外连接与内连接

scala - Spark scala RDD遍历