查找,分组并计算加权平均值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找,分组并计算加权平均值?相关的知识,希望对你有一定的参考价值。
我没有更好的头衔,所以这里。
我有一个查找表,显示每个CityId
到每个商店之间的距离。例如,第一行告诉我H1
距离Eagle
2.5英里。它只显示H
部分,但它有CityId
和商店之间的所有可能的组合:
declare @stores table
(
CityId varchar(10),
miles decimal(8,2),
store varchar(30)
)
insert into @stores
select 'H1',2.5, 'Eagle' union
select 'H1',3.5, 'Sears' union
select 'H1',2.0, 'BK' union
select 'H2',2.0, 'Eagle' union
select 'H2',1.5, 'Sears' union
select 'H2',1.8, 'BK' union
select 'H3',0.1, 'Eagle' union
select 'H3',0.5, 'Sears' union
select 'H3',0.7, 'BK'
这是数据表。它有多少商店离开每个部分:
declare @gone table
(
City varchar(10),
CityId varchar(10),
Outs int
)
insert into @gone
select 'Houston', 'H1', 6 union
select 'Houston','H2', 4 union
select 'Houston', 'H3', 1 union
select 'Miami', 'M1', 12 union
select 'Miami', 'M2', 10 union
select 'Miami', 'M3', 18 union
select 'Miami', 'M4', 15
要在weighted average
获得Eagle
的Houston
,我必须获得休斯顿是城市的所有行,将@gone.Outs
乘以距离,并除以所有Outs
的总和。
对于Houston - Eagle
组合,它将是:
[((H1到Eagle)* 6)+((H2到Eagle)* 4)+((H3到Eagle)* 1)] /(H1 Out + H2 Out + H3 Out)
这是:
((2.5 * 6)+(2.0 * 4)+(0.1 * 1))/(4 + 6 + 1)= 2.1('鹰')
对于Houston - Sears
组合,它将是:
[((H1 to Sears)* 6)+((H2 to Sears)* 4)+((H3 to Sears)* 1)] /(H1 Out + H2 Out + H3 Out)
这是:
((6 * 3.5)+(4 * 1.5)+(1 * 0.5))/(4 + 6 + 1)= 2.5('西尔斯')
在迈阿密,这是一回事:
[((M1 to Sears)* 6)+((M2 to Sears)* 4)+((M3 to Sears)* 1)+((M4 to Sears)* 1)] /(M1 Out + M2 Out + M3出+ M4出)
结果应如下所示:
City Store Avg
-----------------------
Houston Eagle 2.1
Houston Sears 2.5
Houston BK X.X
Miami Eagle X.X
Miami Sears X.X
Miami BK X.X
etc...
嗯,非常感谢任何帮助。
这应该工作:
select g.City, s.Store, sum(s.miles * g.Outs)/sum(g.Outs) as [Avg]
from @gone g
inner join @stores s on g.CityId = s.CityId
group by g.City, s.store
仍然未经测试,但我认为这样做会:
SELECT City, Store,
SUM(miles*outs)/(SELECT SUM(outs) FROM @gone g2 WHERE g2.CityID=s.CityID) AS WeightedAverage
FROM @stores s
INNER JOIN @gone g
ON s.CityID=g.CityID
GROUP BY Store, CityID, City
以上是关于查找,分组并计算加权平均值?的主要内容,如果未能解决你的问题,请参考以下文章