#mysql #average
#mysql #среднее
Вопрос:
Необходимо обновить среднее значение столбца из 3 столбцов, содержащих значение. Это означает, что столбец без значения или 0 не должен включаться в среднее значение. Пожалуйста, помогите. Это немного сложно.
grade_tbl
-- prelim_g --- semi_g --- finals_g --- average_g --
| 85 80 85 |
| 82 87 |
| 83 84 |
| 81 |
----------------------------------------------------
У меня пока есть этот код:
UPDATE grade_tbl SET average = (SELECT AVG(prelim, semi, finals))
Комментарии:
1. Ну , а пропущенные значения равны нулю или так и есть
NULL
? Сначала вам следует прояснить этот момент.2. Я проверил .. его ноль (0)
Ответ №1:
Мы можем попробовать следующую логику, которая присваивает ноль отсутствующим значениям (которые еще не равны нулю), а также нормализуется путем «подсчета» только ненулевых NULL
/ ненулевых значений оценки при определении среднего.
UPDATE grade_tbl
SET
average = CASE WHEN (prelim_g semi_g finals_g) > 0
THEN (prelim_g semi_g finals_g) /
( IF(prelim_g > 0, 1, 0)
IF(semi_g > 0, 1, 0)
IF(finals_g > 0, 1, 0) )
ELSE 0 END;
Кстати, гораздо лучшим дизайном базы данных было бы поместить все оценки в один столбец. Затем вы могли бы использовать функции AVG
и COUNT
, которые по умолчанию игнорируют NULL
значения.
Комментарии:
1. Следует ли добавить еще одно условие, если все 3 столбца равны 0?
2. @JohnArzaga Хорошая мысль, я отредактировал с помощью логики, которая охватывает случай, когда все 3 столбца могут быть равны нулю. В этом случае я просто обновляю до нуля.
3. Работает, как и ожидалось. Я просто поставил 0 по умолчанию.