2013-06-26 3 views
0

Этот вопрос распространяется на previous question. Я хочу добавить средневзвешенный итог в дополнение к некоторым отдельным средневзвешенным значениям.MySQL - две зависимые взвешенные средние значения в одном запросе

У меня есть таблица MySQL, который выглядит следующим образом:

id load_transit load_standby hours_transit hours_standby 
1 40    20    8    4 
2 30    15    10    10 
3 50    10    3    9 

мне нужно сделать следующие расчеты:

(промежуточные расчеты)

hours_transit_total = 8+10+3 = 21 
hours_standby_total = 4+10+9 = 23 
hours_total = 21+23 = 44 

(новый дополнительный желательные)

load_transit_weighted_mean = 40*(8/21) + 30*(10/21) + 50*(3/21) = 36.667 
load_standby_weighted_mean = 20*(4/23) + 15*(10/23) + 10*(9/23) = 13.913 
load_total_weighted_mean = 36.667*(21/44)+13.913*(23/44) = 24.772 

Возможно ли это сделать в одном запросе? Каким будет лучший дизайн?

ответ

2

В расширительном моего ответа на ваш предыдущий вопрос, это так же просто:

SELECT sum(hours_transit * load_transit)/sum(hours_transit), 
     sum(hours_standby * load_standby)/sum(hours_standby), 
     (sum(hours_transit * load_transit + hours_standby * load_standby))/sum(hours_transit + hours_standby) 
FROM table1 

Вот corresponding sqlfiddle.

+0

Спасибо. Невозможно ли «кэшировать»/подзапрос результат каждого запроса SUM (hours_x * load_x), поэтому их не нужно запрашивать дважды? Мне интересно о производительности (в моей реальной таблице будет много столбцов и строк). – mtmacdonald

+0

Я не знаю, будут ли запросы выполняться дважды - попробуйте объяснить это и посмотреть, что произойдет. –