2015-04-01 74 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 2015-04-01 12:07:35