SQL-计算没有组的总体平均值?
我有两个临时表1,其中存储了两列,Locationid,average,另一个存储了overallaverage 我已经成功地填充了位置列和平均列,但不知道如何进行总体平均,然后在选择中将它们连接在一起。我可以算出总体平均值,但我不知道如何将其加入第一个临时表 语句示例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,则需要分组
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实际上,我以前从未听说过横向查询。我得查一下。