Sql server 在SQL Server中计算加权平均值
我试图根据以下计算结果计算加权平均值 我有一个类似以下内容的数据集:Sql server 在SQL Server中计算加权平均值,sql-server,tsql,Sql Server,Tsql,我试图根据以下计算结果计算加权平均值 我有一个类似以下内容的数据集: item | Date Sent | Date Received 1 | 2 Feb 10am | 3 Feb 10am 1 | 6 Feb 11am | 6 Feb 12pm 2 | 2 Feb 10am | 3 Feb 10am 2 | 6 Feb 11am | 6 Feb 12p
item | Date Sent | Date Received
1 | 2 Feb 10am | 3 Feb 10am
1 | 6 Feb 11am | 6 Feb 12pm
2 | 2 Feb 10am | 3 Feb 10am
2 | 6 Feb 11am | 6 Feb 12pm
然后,我需要根据四舍五入的时间差计算平均值,意思是:
Time Diff | Count |
1 | 2 |
12 | 2 |
因此,在这种情况下:
1 * 2 + 12 * 2 / (12 + 1)
我已经编写了SQL查询来计算聚合表:
select
floor(datediff(hh, dateSent, dateReceived)) as hrs,
count(item) as freq
from
table
group by
floor(datediff(hh, dateSent, dateReceived))
having
floor(datediff(hh, dateSent, dateReceived)) < 100
order by
floor(datediff(hh, dateSent, dateReceived)) asc;
我应该做子查询吗?我不熟练,我也尝试过,但不断地出现语法错误
有人能帮我获取SQL查询以获得加权平均值吗?如果您所说的加权平均值是所有时间差的平均值,那么以下内容可能会有所帮助:
select AVG(a.hrs)
from
(
select floor(datediff(hh,dateSent,dateReceived)) as hrs,
count(item) as freq from table
group by floor(datediff(hh,dateSent,dateReceived))
having floor(datediff(hh,dateSent,dateReceived)) <100
-- order by floor(datediff(hh,dateSent,dateReceived)) asc
) a
我的猜测是,您实际上希望以如下方式按ID分组:从myTable group by item中选择item,hrs=AVGDATEDIFFHOUR,dateSent,dateReceived,freq=COUNT*,AVGDATEDIFFHOUR,dateSent,dateReceived<100 ORDER by 2;或者类似的东西?我实际上想要得到加权平均值,我以为这会是子查询的一部分,但我还没有成功完成。为什么你的订单是2?我不确定你所说的加权平均是什么意思。它是如何加权的?另外,orderby2只是懒洋洋的简写,表示第二列的顺序。加权是通过问题中第二个表中的计数来完成的。所以权重就是时间差值。是的,这已经足够接近了,谢谢!我不知道你能做到这一点。我的最终结果是选择suma.hrs*a.freq/suma.freq而不是AVGa.hrs