【问题标题】:3 Table Join SQL Big Query3 表连接SQL大查询
【发布时间】:2018-06-20 15:47:53
【问题描述】:

我是 SQL 连接的新手,所以请耐心等待,我要做的是列出每个学生每周的学生考试成绩。我的查询是,

SELECT
  agg.Week,
  meta.Category,
  agg.Student,
  meta.Funding,
  agg.Test_Results,
  agg.Test_Points,
  phy.Test_Results,
  phy.Test_Points
FROM Agriculture agg

INNER JOIN metadata meta
 ON meta.Student_ID = agg.Student_ID

INNER JOIN Physics phy
 ON phy.Student_ID = agg.Student_ID

WHERE agg.Week BETWEEN '1' AND '5'

对我来说这看起来是正确的,但由于某种原因,发生的事情是 Test_Results 和 Test_Points 一遍又一遍地重复自己,我不知道如何解决它。我所说的重复是指,由于每周的分数都是相同的 120,因此学生 (9) 将获得 95 分,95 分会一遍又一遍地为同一个学生重复。我不确定是否需要将子查询添加到 INNER JOINS。

表格是:

元数据 --> (Category, Funding, Student_ID)(一对多比较表)

物理 --> (Test_Results, Test_Points, Student_ID)(多对多)

农业 -->(周、学生、Test_Results、Test_Points、Student_ID)(多对多)

再次重申,我是新加入的,所以如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您使用 Student_ID 加入表。如果来自 Agriculture 的相同 Student_ID 元数据中有多个对应行,则结果集将显示重复。 物理表也是如此。

    例如:表 Agriculture 中有 10 行对应一个 Student_ID,元数据中有 2 行具有相同 Student_ID,如果加入这些表,您将得到 20 行。

    您确实可以使用子查询来减少元数据和物理中每个 Studen_ID 的行数,并加入这些子选择。

    【讨论】:

    • 我在每个连接中创建了子查询并修复了它!谢谢!
    【解决方案2】:

    您可以简单地为 agg.Student 使用 DISTINCT 关键字。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多