【发布时间】:2017-01-11 14:16:35
【问题描述】:
我正在尝试根据以下计算计算加权平均值。
我有一个如下所示的数据集:
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 查询以获取加权平均值吗?
【问题讨论】:
-
我猜你真的想按 ID 以这样的方式分组:
SELECT item, hrs = AVG(DATEDIFF(HOUR, dateSent, dateReceived)), freq = COUNT(*) FROM myTable GROUP BY item HAVING AVG(DATEDIFF(HOUR, dateSent, dateReceived)) < 100 ORDER BY 2;或类似的方式? -
我实际上想要获得加权平均值,我认为这将是子查询的一部分,但我还没有设法完成它。你为什么要在 2 点前下单?
-
我不确定您所说的“加权平均”是什么意思。它是如何“加权”的?此外,
order by 2只是懒惰的速记“按第二列排序”。 -
加权是由问题中发布的第二个表中的计数完成的。所以权重将是 Time Diff 值。
标签: sql-server tsql