【问题标题】:Joining tables and finding difference连接表并发现差异
【发布时间】:2020-09-08 17:49:31
【问题描述】:

我有一个包含以下架构的表:

Table1
    +------------------+--------------------+-------------------+-------------+-------------+
    |student_id|project_id|name|project_name|approved|evaluation_type|grade| cohort_number|

我有另一张桌子,上面有以下内容:

Table2
    +-------------+----------+
    |cohort_number|project_id|

我的问题是:我想为每个 student_id 获取他尚未完成的项目(无行)。我知道他应该做的所有项目的方法是检查cohort_number。基本上我需要两张表之间的“差异”。我想通过与表 2 project_id 的队列编号进行比较,用缺失的条目填充表 1。

我不确定我是否清楚。 我尝试使用 LEFT JOIN,但我只得到匹配的记录。 (我需要相反的)

例子:

Table1

    |student_id|project_id|name|           project_name| approved|evaluation_type|             grade|cohort_number|
    +----------+----------+--------------------+------+--------------------+--------+---------------+------------------
    |        13|        18|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|
    |        13|         7|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|
    |        13|        27|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|

表2

+-------------+----------+
|cohort_number|project_id|
+-------------+----------+
|            3|        18|
|            3|        27|
|            4|        15|
|            3|         7|
|            3|        35|

我想要:

    |student_id|project_id|name|           project_name| approved|evaluation_type|             grade|cohort_number|
    +----------+----------+--------------------+------+--------------------+--------+---------------+------------------
    |        13|        18|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|
    |        13|         7|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|
    |        13|        27|Name|  project/sd-03-bloc...|    true|       standard|               1.0|            3|
    |        13|        35|Name|  project/sd-03-bloc...|    false|       standard|                 0|            3|

提前致谢

【问题讨论】:

  • 请提供样本数据和所需结果以阐明您的要求。
  • 添加了示例。谢谢
  • 那么,对于table1 中的给定学生,nameproject_nameevaluation_typecohort_number 的列总是相同的?
  • 姓名和群组编号是的。但 project_name 和 evaluation_type 没有。更清楚地说,project_name 来自表 2,但为简化起见,我删除了

标签: sql dataframe join pyspark apache-spark-sql


【解决方案1】:

如果我正确地跟随你,你可以从table1 中获取所有不同的(student_id, cohort_number, name) 元组,然后从table2 中获取所有对应的行。这基本上为学生应该完成的每个项目提供了一行。

然后您可以将table1left join 一起带上。 “缺失”项目由 project_nameapprovedevaluation_typegrade 列中的 null 值标识。

select 
    s.student_id,
    t2.project_id,
    s.name,
    t1.project_name,
    t1.approved,
    t1.evaluation_type,
    t1.grade,
    s.cohort_number
from (select distinct student_id, cohort_number, name from table1) s
inner join table2 t2 
    on  t2.cohort_number = s.cohort_number
left join table1 t1
    on  t1.student_id = s.student_id 
    and t1.project_id = t.project_id

【讨论】:

  • 完美!谢谢你:)
猜你喜欢
  • 2010-09-29
  • 2014-05-20
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
相关资源
最近更新 更多