2013-06-26 48 views
3

我有一个MySQL表看起来像这样:MySQL的 - 让所有列均线也有“总”平均

id load_transit load_standby 
1 40    20 
2 30    15   
3 50    10 

我需要做以下计算:

load_transit_mean = (40+30+50)/3 = 40 
load_standby_mean = (20+15+10)/3 = 15 
total_mean = (40+15)/2 = 27.5 

是它可能在单个查询中做到这一点?最好的设计是什么?

我需要我的答案是可扩展的(真正的设计有更多的行和列),并且能够处理一些包含NULL的行。

回答

6

我相信这会做到这一点:

SELECT AVG(Load_transit) 
    , AVG(load_standby) 
    , (AVG(Load_transit) + AVG(load_standby))/2.0 
FROM table 

AVG()函数处理,它忽略了他们空的,如果你想空行中的分母来计算,你可以用SUM()超过COUNT(*)更换AVG(),即:

SUM(load_transit)/COUNT(*) 

关于可伸缩性,像上面那样手动列出它们可能是最简单的解决方案。