1

次のような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

(望ましい結果)

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

単一のクエリでこれを行うことは可能ですか? ベストなデザインは何でしょう?

4

2 に答える 2

6

ご了承ください

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

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

これにより、使用して必要な結果を得ることができます

SELECT sum(hours_transit * load_transit) / sum(hours_transit),
       sum(hours_standby * load_standby) / sum(hours_standby)
FROM your_table
于 2013-06-26T12:05:19.573 に答える
0

これと同じ質問があり、この小さなクエリを作成したところ、単一のクエリで加重平均を見つける方法が明確になると思います。

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;
于 2014-06-18T23:12:29.093 に答える