我想为列total
做一些计算
通过为特定列添加两个标记列
std_id
。
例如30+25=55
,std_id 32的总计= 55
+--------+-----------+-------+----+----------------+-------+
| std_id | course_id | marks | mp | subject | total |
+--------+-----------+-------+----+----------------+-------+
| 32 | 40 | 30.00 | 22 | Elective Maths | 0 |
| 32 | 40 | 25.00 | 12 | Elective Maths | 0 |
| 39 | 40 | 30.00 | 22 | Elective Maths | 0 |
| 39 | 40 | 20.00 | 12 | Elective Maths | 0 |
+--------+-----------+-------+----+----------------+-------+
我试过像
这样的东西update student_reports
set total= sum(marks)
where std_id=std_id;
但不起作用, 非常感谢任何帮助,尤其是不需要更改表格结构的帮助
对于上面的第一个表,使用单个course_id,代码 通过GILEYS完美计算出总数
更新student_reports r,( 选择std_id,sum(marks)为total 来自student_reports 按std_id分组 )t 设r.total = t.total 其中r.std_id = t.std_id;
我的下一个问题是,如果我添加另一个course_id值,将其设为 (40,43) 表格,我该怎样做新的总计
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
| std_id | course_id |标记| mp |主题|总计|
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
| 32 | 40 | 30.00 | 22 |选修数学| 0 |
| 32 | 40 | 25.00 | 12 |选修数学| 0 |
| 39 | 40 | 30.00 | 22 |选修数学| 0 |
| 39 | 40 | 20.00 | 12 |选修数学| 0 |
| 32 | 43 | 40.00 | 22 |核心数学| 0 |
| 32 | 43 | 20.00 | 12 |核心数学| 0 |
| 39 | 43 | 45.00 | 22 |核心数学| 0 |
| 39 | 43 | 40.00 | 12 |核心数学| 0 |
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
我试过像
这样的东西更新student_reports r,(选择std_id,course_id,subject,sum(marks) 作为来自student_reports group by std_id的总和)t set r.total = t.total 其中r.std_id = t.std_id AND r.course_id = t.course_id AND r.subject = t.subject;
但是没有给出总数,因为我会专家,请需要 再次提供帮助
以达到预期的结果
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
| std_id | course_id |标记| mp |主题|总计|
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
| 32 | 40 | 30.00 | 22 |选修数学| 55 |
| 32 | 40 | 25.00 | 12 |选修数学| 55 |
| 39 | 40 | 30.00 | 22 |选修数学| 50 |
| 39 | 40 | 20.00 | 12 |选修数学| 50 |
| 32 | 43 | 40.00 | 22 |核心数学| 60 |
| 32 | 43 | 20.00 | 12 |核心数学| 60 |
| 39 | 43 | 45.00 | 22 |核心数学| 95 |
| 39 | 43 | 40.00 | 12 |核心数学| 95 |
+ -------- + ----------- + ------- + ---- + ------------ ---- + ------- +
答案 0 :(得分:0)
试试这个:
update student_reports
set total = (
select sum(marks)
from student_reports
where std_id = 32
)
where std_id = 32;
或者如果您想要更新整个表:
update student_reports
set total = t.total
from (
select std_id, sum(marks) as total
from student_reports
group by std_id
) t
where t.std_id = student_reports.std_id;
编辑,上面的内容可能不适用于MySQL,你可以试试以下内容:
update student_reports r, (
select std_id, sum(marks) as total
from student_reports
group by std_id
) t
set r.total = t.total
where r.std_id = t.std_id;
答案 1 :(得分:0)
总共'列可能会导致悲伤,因为一旦为给定的id插入新数据,它就会出错。此查询将为您提供相同的结果,而无需在每次获取新数据时运行更新。如果您需要它像表格一样,您可以查看creating a view。
SELECT t.std_id, t.course_id, t.marks, t.mp, t.subject, c.total
FROM student_reports AS t
JOIN (SELECT std_id, SUM(marks) AS total
FROM student_reports
GROUP BY std_id) AS c ON c.std_id = t.std_id