Mi sono imbattuto in una situazione simile. Questo è venuto utile: http://tech-blog.borychowski.com/index.php/2009/02/mysql/average-value-in-a-row/
Dalla pagina:
Quando facciamo:
SELECT *, (V.rank_0 + V.rank_1 + V.rank_2)/3
AS row_avg FROM voting V
riceviamo solo le medie corrette per le righe in cui tutti i valori non sono NULL. Ma quando ho per es. 3, NULL, 4 Mi piacerebbe ottenere 3,5 come ritorno. Questo è il momento in cui la funzione COALESCE() è a portata di mano.
Cosa fa COALESCE()? Dal manuale MySQL abbiamo:
Restituisce il primo valore non NULL nell'elenco o NULL se non ci sono valori non NULL.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
E queste informazioni ci aiuteranno a costruire un'altra istruzione 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: Ho il mio modo personale come voglio a fare domande, non c'è bisogno di cambiare le mie intestazioni sistematicamente ! – markus
Se nella disposizione che descrivi hai colonne, è una bandiera rossa che questa tabella non è normalizzata correttamente. Dovrebbero essere righe in una tabella figlio. –
@ Bill: forse un odore ma non penso che sia il caso qui. Ho un singolo risultato del questionario in una riga di dati che corrisponde a un utente e una misurazione. – markus