我正在尝试从两个表中选择列,如果它们使用相同的辅助键,则将它们添加在一起。这是我的表格:
assignments table
assID modID userID assName grade weighting
1 1 1 ass1 70 25
2 1 1 ass2 65 75
3 2 1 ass3 71 50
4 2 1 ass4 74 50
modules table
modID SOUD modName
1 2326 server side
2 2345 OOP
我想通过使用 SUM(Grade*(Weighting/100)) 并将具有相同 modID 的列的结果相加来查找每个模块的总体成绩
我当前的代码是:
SELECT SOUD, ModuleName, SUM(Grade*(Weighting/100))
FROM `assignments`, `modules`
GROUP BY assignments.ModuleID
我也尝试过
SELECT SOUD, ModuleName, SUM(Grade*(Weighting/100))
FROM `assignments`, `modules`
GROUP BY assignments.ModuleID
但都不起作用
有什么办法可以做到这一点吗?
最佳答案
这是您的查询之一:
SELECT SOUD
, ModuleName
, SUM(Grade * (Weighting / 100))
FROM `assignments`
, `modules`
GROUP BY assignments.ModuleID
该语法的作用是将赋值
中的每一行与模块
中的每一行相乘(这称为“笛卡尔积”)。因此,要解决这个问题,在 from 子句中使用逗号停止。
SELECT
m.SOUD
, m.ModuleName
, SUM(a.Grade * (a.Weighting / 100))
FROM `assignments` a
INNER JOIN`modules` m ON a.modID = m.modID
GROUP BY a.ModuleID
另请注意,当您连接表时,务必在表名或表别名前加上每个列引用的前缀。
进一步警告,上面的查询在 MySQL 中“可能有效”,具体取决于服务器设置。 MySQL 有一种非常奇怪且非标准的处理 group by
的方法,因此如果您想要一个强大的解决方案,请始终将 select 子句(不使用聚合函数)的列包含到 group by 中子句,如下所示:
SELECT
m.SOUD
, m.ModuleName
, SUM(a.Grade * (a.Weighting / 100))
FROM `assignments` a
INNER JOIN`modules` m ON a.modID = m.modID
GROUP BY
m.SOUD
, m.ModuleName
关于mysql - 通过两个表之间的连接从一张表中选择总体成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47402746/