Ответ 1
SELECT student, (SUM(mark1)+SUM(mark2)+SUM(mark3)....+SUM(markn)) AS Total
FROM your_table
GROUP BY student
У меня есть таблица показателей учащихся. вот таблица,
subject | mark1 | mark2 | mark3 |......|markn
stud1 | 99 | 87 | 92 | | 46
stud2 |....................................
.
.
studn |....................................|
Теперь мне нужно суммировать его для каждого ученика с суммарными отметками. Я получил его, используя sum(mark1+mark2+...+markn) group by stud
. Я хочу знать, как суммировать его, не добавляя имя каждого столбца, оно будет огромным, если в случае до метки26. так может кто-нибудь знать, как это исправить. Спасибо заранее.
SELECT student, (SUM(mark1)+SUM(mark2)+SUM(mark3)....+SUM(markn)) AS Total
FROM your_table
GROUP BY student
Другой способ сделать это - создать запрос select. Играйте с этим fiddle.
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 mark1+mark2+mark3 FROM scorecard
Вам больше не придется вручную добавлять все столбцы.
ВЫБЕРИТЕ студента, СУММА (mark1 + mark2 + mark3 +.... +markn) AS Итого FROM your_table
Короткий ответ: нет отличного способа сделать это, учитывая дизайн, который у вас есть. Вот связанный вопрос по теме: Суммировать значения одной строки?
Если вы нормализировали свою схему и создали отдельную таблицу под названием "Знаки", в которой был 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'
Вы можете изменить структуру базы данных таким образом, чтобы все строки-субъекты становились столбчатой переменной (например, электронной таблицей). Это облегчает такой анализ.
Если какой-либо из ваших столбцов markn
имеет значение "AllowNull", вам нужно будет сделать немного больше, чтобы убедиться, что возвращается правильный результат, потому что значение 1 NULL приведет к итоговому значению NULL.
Это то, что я считаю правильным ответом.
SUM(IFNULL('mark1', 0) + IFNULL('mark2', 0) + IFNULL('mark3', 0)) AS 'total_marks'
IFNULL вернет второй параметр, если первый равен NULL. COALESCE может быть использован, но я предпочитаю использовать его, только если это необходимо. См. Какая разница между ifnull и coalesce в MySQL?
СУММА -ing весь расчет опрятнее, чем SUM -ing каждый столбец в отдельности.
SELECT 'student', SUM(IFNULL('mark1', 0) + IFNULL('mark2', 0) + IFNULL('mark3', 0)) AS 'total_marks'
FROM student_scorecard
GROUP BY 'student'