MySQL Sum()多列

我有一张学生记分卡。 这里是桌子,

subject | mark1 | mark2 | mark3 |......|markn stud1 | 99 | 87 | 92 | | 46 stud2 |.................................... . . studn |....................................| 

现在,我需要为每个学生总分的总和。 我通过使用sum(mark1+mark2+...+markn) group by stud得到它。 我想知道如何在不添加每个列名的情况下对其进行求和,如果达到了mark26,这将是巨大的。 所以谁能知道如何解决这个问题。 提前致谢。

 SELECT student, (SUM(mark1)+SUM(mark2)+SUM(mark3)....+SUM(markn)) AS Total FROM your_table GROUP BY student 

另一种方法是通过生成select查询。 玩这个小提琴 。

 SELECT CONCAT('SELECT ', group_concat(`COLUMN_NAME` SEPARATOR '+'), ' FROM scorecard') FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = (select database()) AND `TABLE_NAME` = 'scorecard' AND `COLUMN_NAME` LIKE 'mark%'; 

上面的查询将生成另一个查询,将为您做select。

  1. 运行上面的查询。
  2. 获取结果并运行结果查询。

样品结果:

 SELECT mark1+mark2+mark3 FROM scorecard 

您将不必手动添加所有列。

简短的回答是,鉴于你的devise,没有很好的方法来做到这一点。 下面是关于这个主题的一个相关问题: 单行的总和值?

如果规范化模式并创build了一个名为“Marks”的单独表,其中有一个subject_id和一个标记列,这将允许您按照关系模型的预期利用SUM函数。

那么你的查询将是

 SELECT subject, SUM(mark) total FROM Subjects s INNER JOIN Marks m ON m.subject_id = s.id GROUP BY s.id 

//多个行的Mysql和嗨这里是做列总和的简单方法

 SELECT sum(IF(day_1 = 1,1,0)+IF(day_3 = 1,1,0)++IF(day_4 = 1,1,0)) from attendence WHERE class_period_id='1' and student_id='1' 

您可以更改数据库结构,使所有主题行成为列variables(如电子表格)。 这使得这种分析更容易