Media ponderada de MySQL en una sola consulta

Tengo una tabla MySQL que se ve así:

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

Necesito hacer los siguientes cálculos:

(cálculos intermedios)

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

(resultado deseado)

 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 

¿Es posible hacer esto en una sola consulta? ¿Cuál sería el mejor layout?

Tenga en count que

 40*(8/21) + 30*(10/21) + 50*(3/21) = (40*8)/21 + (30*10)/21 + (50*3)/21 = (40*8 + 30*10 + 50*3)/21 

y

 20*(4/23) + 15*(10/23) + 10*(9/23) = (20*4)/23 + (15*10)/23 + (10*9)/23 = (20*4 + 15*10 + 10*9)/23 

Lo que le permite get los resultados que desea usando

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

Acabo de tener la misma pregunta y construí esta pequeña consulta, creo que deja en claro cómo encontrar el promedio ponderado en una sola consulta:

 select sum(balance), sum(rate * balance / 5200) as weighted_rate, -- what I want -- what you cannot do: sum(rate * balance / sum(balance)) sum(balance * rate) / sum(balance) as weighted_rate_legit -- ah thank you transitive math properties from ( select '4600' as balance, '2.05' as rate from dual union all select '600' as balance, '2.30' as rate from dual ) an_alias;