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

SQL-计算没有组的总体平均值?,sql,sql-server-2008,sql-server-2008-r2,Sql,Sql Server 2008,Sql Server 2008 R2,我有两个临时表1,其中存储了两列,Locationid,average,另一个存储了overallaverage 我已经成功地填充了位置列和平均列,但不知道如何进行总体平均,然后在选择中将它们连接在一起。我可以算出总体平均值,但我不知道如何将其加入第一个临时表 语句示例 SELECT AVG(Hours) AS OverallAverage FROM Hours 这算出了总体平均值,但我需要一些东西将其加入,例如Locationid,但如果我将Locationid添加到select,则需要分组

我有两个临时表1,其中存储了两列,Locationid,average,另一个存储了overallaverage

我已经成功地填充了位置列和平均列,但不知道如何进行总体平均,然后在选择中将它们连接在一起。我可以算出总体平均值,但我不知道如何将其加入第一个临时表

语句示例

SELECT AVG(Hours) AS OverallAverage
FROM Hours
这算出了总体平均值,但我需要一些东西将其加入,例如Locationid,但如果我将Locationid添加到select,则需要分组,从而给出每个位置的平均值,而不是总体平均值

表的外观示例

LocationID Average OverallAverage 1 0.7 0.65 2 0.55 0.65 3 0.45 0.65 4 0.9 0.65 位置ID平均超压平均值 1 0.7 0.65 2 0.55 0.65 3 0.45 0.65 4 0.9 0.65
有什么提示吗?

您可以使用交叉应用:

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

甚至是交叉连接

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

请参见您可以使用
交叉应用

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

甚至是交叉连接

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

请看

我不清楚你说的“但我需要一些东西加入”(特别是“一些东西”)是什么意思,但你可以这样做:

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

我不清楚你说的“但我需要一些东西加入”(特别是“一些东西”)是什么意思,但你可以这样做:

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

cross-apply
与(标准)
cross-join
之间是否存在差异?
apply
通常与相关子查询或udf一起使用。在这种情况下,您可以使用
交叉联接
——谢谢。因此,
CROSS-APPLY
是SQL标准所称的
LATERAL
查询。使用了交叉连接,效果很好,不使用交叉连接,主要是内部和外部,但这是一个很好的知识点,很多thanks@a_horse_with_no_name实际上,我以前从未听说过
横向
查询。我必须查一下这个问题。
交叉应用
和(标准)
交叉连接
之间有什么区别吗?
应用
通常与相关子查询或udf一起使用。在这种情况下,您可以使用
交叉联接
——谢谢。因此,
CROSS-APPLY
是SQL标准所称的
LATERAL
查询。使用了交叉连接,效果很好,不使用交叉连接,主要是内部和外部,但这是一个很好的知识点,很多thanks@a_horse_with_no_name实际上,我以前从未听说过
横向
查询。我得查一下。