【发布时间】:2013-10-18 13:34:59
【问题描述】:
我的 MySQL 表中有三个相同的表,即
first_term_result、second_term_result 和third_term_result
这是其中的列
exam_type_id | student_id | subject_id | mark |
或带有虚拟数据的示例
注意:每个科目有三种不同的考试类型(CA1、CA2、CA3 和考试), 有三个这样的表,内容相同,但数据不同,因为它保存第一个学期的数据,另一个保存第二学期的数据,最后一个保存第三学期的数据。
first_term_result:
exam_type_id | student_id | subject_id | mark |
1 | 6 | 7 | 12 |
2 | 6 | 7 | 9 |
3 | 6 | 7 | 13 |
4 | 6 | 7 | 45 |
1 | 4 | 7 | 7 |
2 | 4 | 7 | 5 |
3 | 4 | 7 | 10 |
4 | 4 | 7 | 34 |
second_term_result:
exam_type_id | student_id | subject_id | mark |
1 | 6 | 7 | 15 |
2 | 6 | 7 | 6 |
3 | 6 | 7 | 10 |
4 | 6 | 7 | 50 |
1 | 4 | 7 | 6 |
2 | 4 | 7 | 3 |
3 | 4 | 7 | 9 |
4 | 4 | 7 | 44 |
third_term_result:
exam_type_id | student_id | subject_id | mark |
1 | 6 | 7 | 17 |
2 | 6 | 7 | 8 |
3 | 6 | 7 | 15 |
4 | 6 | 7 | 67 |
1 | 4 | 7 | 12 |
2 | 4 | 7 | 8 |
3 | 4 | 7 | 12 |
4 | 4 | 7 | 50 |
现在我想要实现的是获得first_term_result.mark 的SUM() second_term_result.mark 和third_term_result.mark 每个学生WHERE subject_id=7 按学生姓名分组。
另一个非常重要的问题是我将为每个学生计算 first_term+second_term+third_term 的总和,并且还希望能够为该学生和 DESC 中的科目订购总和,以便我可以相应地定位它们如果在 php 上会更容易,请告诉我。
谢谢
这对我来说似乎很复杂,但我知道这里有大师可以做到这一点,我在某处读到即使使用汇总也可以订购。
下面是我的代码,它显然不起作用。
SELECT CONCAT(s.fname,' ',s.mname,' ',s.lname) AS sname,
SUM(f.mark) AS first_total,
SUM(se.mark) AS second_total,
SUM(t.mark) AS third_total
SUM(f.first_total,second.total,third_total) as GT // just to show my intention
FROM students s, first_term_result f, second_term_result se, third_term_result t
WHERE s.studentID=f.student_id AND
s.studentID=se.student_id AND
s.studentID=t.student_id AND
f.subject_id=7 AND
se.subject_id=7 AND
t.subject_id=7
GROUP BY sname ORDER BY GT DESC
【问题讨论】:
-
如果你进一步规范化你的数据,它会变得不那么复杂。为术语创建一列并将所有术语保留在同一个表中。
-
@DMc 说真的,这让我很笨,如果我将所有条款放在同一张桌子上,我似乎知道如何实现同样的目标
-
complex :D 我们使用最多 200 行的查询..
标签: php mysql sql join subquery