SQL - 计算没有组的整体平均值?

时间:2013-02-15 10:52:24

标签: sql sql-server-2008 sql-server-2008-r2

我有2个临时表1,它存储2列,Locationid,average和另一个存储overallaverage的列。

我已经成功填充了位置和平均列但无法弄清楚如何执行overallaverage然后在SELECT中将它们连接在一起。我可以计算出整体平均值,我无法弄清楚如何将它加入到第一个临时表中。

陈述的例子

SELECT AVG(Hours) AS OverallAverage
FROM Hours

这可以解决overallaverage但是我需要一些东西来加入它,即Locationid但是如果我将Selectid添加到select,那么它将需要分组,因此给我一个平均每个位置而不是整体平均值。

表格外观的示例

LocationID       Average       OverallAverage
1                0.7              0.65
2                0.55             0.65
3                0.45             0.65
4                0.9              0.65

任何提示?

2 个答案:

答案 0 :(得分:3)

您可以使用CROSS APPLY

select l.locationid, h.OverallAverage
from Location l
cross apply
(
  select avg(hours) as OverallAverage
  from hours
) h

请参阅SQL Fiddle with Demo

甚至是CROSS JOIN

select l.locationid, h.OverallAverage
from Location l
cross join
(
  select avg(hours) as OverallAverage
  from hours
) h

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

我不清楚你对“的意思是什么,但我需要加入某些内容”(特别是“某事”),但你可以这样做:

select t2.col1, 
       t2.col2,
       hr.col1,
       avg(hr.hours) over (partition by locationid) as average
       avg(hr.hours) over () as overall_average
from hours hr
  join table_2 t2 on t2.locationid = hr.locationid