2015-04-01 4 views
0

Я kludged своего пути через, делая это, но я чувствую, что, вероятно,/быстрее/лучше решения чище, и я всегда стремится узнать:MySQL средних ненулевых столбцов

UPDATE myTable SET fAvg = 

(COALESCE(f1,0) + COALESCE(f2,0) + COALESCE(f3,0) + COALESCE(f4,0)) 

/

(
CASE WHEN f1 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN f2 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN f3 IS NOT NULL THEN 1 ELSE 0 END + 
CASE WHEN f4 IS NOT NULL THEN 1 ELSE 0 END 
) 

Итак, как это можно улучшить?

ответ

0

Вы можете упростить подсчет, пользуясь на самом деле MySQL обрабатывает булевы в виде целых чисел в числовом контексте:

UPDATE myTable 
    SET fAvg = (COALESCE(f1,0) + COALESCE(f2,0) + COALESCE(f3,0) + COALESCE(f4,0))/
       ((f1 IS NOT NULL) + (f2 IS NOT NULL) + (f3 IS NOT NULL) + (F4 IS NOT NULL)); 
+0

Если это все, что я пропустил, то я вполне доволен - я предполагал, что будет какой-то умный трюк, используя FIELD или некоторую функцию агрегации нескольких столбцов, о которой я никогда не слышал. – Codemonkey

Смежные вопросы