【问题标题】:Sum scores from two tables in MySQL using two fields in the WHERE clause使用 WHERE 子句中的两个字段对 MySQL 中两个表的分数求和
【发布时间】:2021-04-09 14:59:04
【问题描述】:

我在 MySQL 中有两个表。我将它们称为 grade7grade8。两个表都有所有这些字段,StudentIDFirstNameLastNameTotal_ScoremathScorescienceScore。两个表中都是学生姓名,但 grade7 中的 StudentIDgrade8 中的不同,尽管 FirstName em> 和 LastName 是统一的(同一个人)。我要做的是总结同一学生的 grade7grade8 的分数。意思是,用 FirstNameLastNamegrade7 中的记录的分数相加等于 FirstName 和 grade8 中的 em>姓氏。我下面的代码最初在没有分数时有效。但是,如果已经有分数,它似乎增加了比应该添加的分数。假设它应该输出 70 作为 Total_Score,它将再增加 10 分并输出 80。请查看我的代码并建议我应该做什么。谢谢。

update grade8 o inner join
(
SELECT op.StudentID
sum(ot.Total_Score) as Total_Score_ot
sum(ot.Maths) as Maths_ot
sum(op.Total_Score) as Total_Score_op
sum(op.Maths) as Maths_op
FROM grade7 ot inner join grade8 op
WHERE  ot.FirstName = op.FirstName AND ot.LastName = op.LastName
GROUP BY op.FirstName
) as o1
SET Total_Score=Total_Score_op + Total_Score_ot
Maths=Maths_op + Maths_ot

【问题讨论】:

  • 不确定你的确切问题,但如果你在一个年级有名字,但在另一个年级没有名字,那就不行了。 union 可能更合适
  • 抱歉,如果我没有把我的问题说清楚。两个表中的所有字段都是统一的。所以我在 8 年级和 7 年级都有 FirtsName
  • 请在更新前后为所有表添加示例数据。
  • 请参考我刚刚上传的图片。与原来的问题。它显示了带有样本数据的grade7表,以及更新前后的带有样本数据的grade8表。我希望你明白这一点。谢谢。
  • 两个学生不能同名的想法似乎太乐观了

标签: mysql sql


【解决方案1】:

我建议从两个表的并集开始,然后按学生聚合。另外,我不知道您为什么似乎在这里进行更新而不是选择。

SELECT FirstName, LastName, SUM(Total_Score) AS Total_Score, SUM(Maths) AS Maths
FROM
(
    SELECT FirstName, LastName, Total_Score, Maths FROM grade7
    UNION ALL
    SELECT FirstName, LastName, Total_Score, Maths FROM grade8
) t
GROUP BY FirstName, LastName;

【讨论】:

  • 感谢您的回答。我忘了提到结果将被添加到 Grade8 表中。这就是为什么我在那里有更新grade8。
  • 我不支持这样做。如果要查看两个表的总和,请使用我上面给出的选择,不要更新。
  • 感谢您的建议。但在这种情况下,我实际上需要将结果放在grade8 表中。这样我就可以在 NetBeans GUI 中显示此查询的结果。这样 Grade8 中的 Total_Score 和 Maths 就会显示查询的结果。我该如何做到这一点?我需要帮助。感谢您的帮助。
  • 您需要超越您的 UI 进行思考。选择更强大。如果你要更新表,你最好确保只运行一次!
  • 感谢您的评论。我还需要有关如何在 java 中嵌入 SQL SELECT 以便结果显示在我的 GUI 中的帮助。我在 PHPMyAdmin 中运行了查询,它运行良好。现在我需要将它嵌入到 java 中以在 UI 中显示结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多