Столбец обновления MYSQL со значением столбца

#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 по умолчанию.