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。
- 运行上面的查询。
- 获取结果并运行结果查询。
样品结果:
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(如电子表格)。 这使得这种分析更容易