Я наткнулся на похожую ситуацию. Это стало полезным: http://tech -blog.borychowski.com / index.php / 2009/02 / mysql / среднее значение в строке /
Со страницы:
Когда мы делаем:
SELECT *, (V.rank_0 + V.rank_1 + V.rank_2) / 3
AS row_avg FROM voting V
мы получаем правильные средние значения только для строк, в которых все значения не равны NULL. Но когда у меня есть, например, 3, NULL, 4 Я хотел бы получить 3,5 в качестве возврата. Это тот момент, когда функция COALESCE () пригодится.
Что делает COALESCE ()? Из руководства MySQL мы имеем:
Возвращает первое ненулевое значение в списке или NULL, если нет ненулевых значений.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
И эта информация поможет нам построить еще одно утверждение SELECT:
SELECT *,
#first part
(COALESCE(V.rank_0, 0)
+ COALESCE(V.rank_1, 0)
+ COALESCE(V.rank_2, 0))
/
#second part
(3 -
(COALESCE(V.rank_0 - V.rank_0, 1)
+ COALESCE(V.rank_1 - V.rank_1, 1)
+ COALESCE(V.rank_2 - V.rank_2, 1))
) AS row_avg FROM voting V