Подтвердить что ты не робот

MySQL Sum() несколько столбцов

У меня есть таблица показателей учащихся. вот таблица,

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

Теперь мне нужно суммировать его для каждого ученика с суммарными отметками. Я получил его, используя sum(mark1+mark2+...+markn) group by stud. Я хочу знать, как суммировать его, не добавляя имя каждого столбца, оно будет огромным, если в случае до метки26. так может кто-нибудь знать, как это исправить. Спасибо заранее.

4b9b3361

Ответ 1

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

Ответ 2

Другой способ сделать это - создать запрос 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

Вам больше не придется вручную добавлять все столбцы.

Ответ 3

ВЫБЕРИТЕ студента, СУММА (mark1 + mark2 + mark3 +.... +markn) AS Итого FROM your_table

Ответ 4

Короткий ответ: нет отличного способа сделать это, учитывая дизайн, который у вас есть. Вот связанный вопрос по теме: Суммировать значения одной строки?

Если вы нормализировали свою схему и создали отдельную таблицу под названием "Знаки", в которой был 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

Ответ 5

//Сумма 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'

Ответ 6

Вы можете изменить структуру базы данных таким образом, чтобы все строки-субъекты становились столбчатой ​​переменной (например, электронной таблицей). Это облегчает такой анализ.

Ответ 7

Если какой-либо из ваших столбцов 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'