如何使用百分比值更新Mysql数据库表

时间:2015-01-21 15:28:20

标签: mysql sql

我有一个类似于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

不需要%符号,只是根据每个学生的所有科目的总分来确定每个科目的表现的百分比值。因此,每个学生最薄弱的主题都可以识别。

2 个答案:

答案 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

我认为这可以解决您的问题。