Me encontré con una situación similar. Esto vino útil: http://tech-blog.borychowski.com/index.php/2009/02/mysql/average-value-in-a-row/
Desde la página:
Cuando hacemos:
SELECT *, (V.rank_0 + V.rank_1 + V.rank_2)/3
AS row_avg FROM voting V
recibimos solamente promedios correctos para las filas en las que todos los valores que no son nulos. Pero cuando tengo, por ejemplo, 3, NULL, 4 Me gustaría obtener 3.5 como devolución. Ese es el momento en que la función COALESCE() es útil.
¿Qué hace COALESCE()? Del manual de MySQL tenemos:
Devuelve el primer valor no NULL de la lista, o NULL si no hay valores no NULL.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
Y esta información nos ayudará a construir otra instrucción 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
Rich B: Tengo mi manera personal cómo quiero hacer preguntas, no es necesario cambiar los encabezados de forma sistemática ! – markus
Si tiene columnas en el arreglo que describe, es una señal de que esta tabla no está normalizada correctamente. Deben ser filas en una tabla secundaria. –
@Bill: tal vez un olor, pero no creo que sea el caso aquí. Tengo los resultados de un solo cuestionario en una fila de datos que corresponde con un usuario y una medición. – markus