我有一个类似于Mysql数据库的表
rollno student subject score
101 jake math 55
101 jake chemistry 75
101 jake physics 25
102 mark math 35
102 mark chemistry 58
102 mark physics 78
那么我如何以分数百分比更新此表?
例如:round((math/(math+chemistry+physics))*100)
..
rollno student subject score percent
101 jame math 55 35
101 jame chemistry 75 48
101 jame physics 25 16
102 mark math 35 20
102 mark chemistry 58 34
102 mark physics 78 46
不需要%符号,只是根据每个学生的所有科目的总分来确定每个科目的表现的百分比值。因此,每个学生最薄弱的主题都可以识别。
答案 0 :(得分:1)
由于MySQL缺少分析函数,您必须两次查询同一个表,一次查询单个值,一次查询总和。
select rollno, student, subject, score,
score /
(
select sum(score)
from mytable s
where s.rollno = m.rollno and s.student = m.student
) * 100 as percent
from mytable m;
或者:
select rollno, student, m.subject, m.score,
m.score / s.sum_score * 100 as percent
from mytable m
join
(
select rollno, student, sum(score) as sum_score
from mytable
group by rollno, student
) s using(rollno, student);
如果你想摆脱小数位,请使用ROUND。
至于为此引入一个新专栏:我不会这样做。你会冗余地保存数据,这通常会迟早会导致问题。每当添加,删除或更改分数时,您都必须确保所有相关记录的百分比都得到更新。
如果您更频繁地需要此查询,请创建一个视图。
答案 1 :(得分:0)
试试这个: -
SELECT rollno, student, subject, score, subject/(SELECT SUM(score) FROM TAB GROUP BY roll_no) * 100 AS percent
FROM TAB
我认为这可以解决您的问题。