计算每行平均值,然后计算每列平均值
Calculate average per row and then calculate average per column
我有一个table如下所示
Col1 Col2 Col3 Col4
NULL NULL NULL 54.84
NULL NULL NULL 75.40
57.24 73.61 NULL NULL
我想先计算行的平均值,然后再计算列的最终平均值
所以我的计算变成
Row1Avg 54.84
Row2Avg 75.40
Row3Avg 65.42
然后我得出最终平均值 Row1Avg,Row2Avg,Row3Avg = 65.22
有人能告诉我如何有效地实现这一目标吗?我是如何考虑这样做的,我有一个 temp table 单列,我在其中存储行的 AVG,然后我只取 temp table 列的平均值。只是想知道是否有更好的方法。
所以您需要每一行和每一列的平均值?我会做两个单独的计算,一个用于行,另一个用于列。通读 table 并找到每一行的平均值,将列值存储在临时列 table 或列表中。
我会使用 cross apply
和 grouping sets
:
select t.id, avg(row_avg)
from t cross apply
(select avg(col) as row_avg
from (values (col1), (col2), (col3), (col4)) v(col)
) s
group by grouping sets ( (id), () );
以上假定您有一个唯一的 ID 来标识每一行。如果没有,那么你需要像 union all
:
这样的东西
with s as (
select t.*, s.row_avg
from t cross apply
(select avg(col) as row_avg
from (values (col1), (col2), (col3), (col4)) v(col)
) s
)
select s.row_avg
from s
union all
select avg(s.row_avg)
from s;
尝试使用 CROSS APPLY
SELECT
AVG(t2.Average)
FROM
Table t1
CROSS APPLY (
SELECT Average = AVG(Value)
FROM (VALUES (Col1), (Col2), (Col3), (Col4)) B1(Value)
) t2
结果是65.221666
我有一个table如下所示
Col1 Col2 Col3 Col4
NULL NULL NULL 54.84
NULL NULL NULL 75.40
57.24 73.61 NULL NULL
我想先计算行的平均值,然后再计算列的最终平均值
所以我的计算变成
Row1Avg 54.84
Row2Avg 75.40
Row3Avg 65.42
然后我得出最终平均值 Row1Avg,Row2Avg,Row3Avg = 65.22
有人能告诉我如何有效地实现这一目标吗?我是如何考虑这样做的,我有一个 temp table 单列,我在其中存储行的 AVG,然后我只取 temp table 列的平均值。只是想知道是否有更好的方法。
所以您需要每一行和每一列的平均值?我会做两个单独的计算,一个用于行,另一个用于列。通读 table 并找到每一行的平均值,将列值存储在临时列 table 或列表中。
我会使用 cross apply
和 grouping sets
:
select t.id, avg(row_avg)
from t cross apply
(select avg(col) as row_avg
from (values (col1), (col2), (col3), (col4)) v(col)
) s
group by grouping sets ( (id), () );
以上假定您有一个唯一的 ID 来标识每一行。如果没有,那么你需要像 union all
:
with s as (
select t.*, s.row_avg
from t cross apply
(select avg(col) as row_avg
from (values (col1), (col2), (col3), (col4)) v(col)
) s
)
select s.row_avg
from s
union all
select avg(s.row_avg)
from s;
尝试使用 CROSS APPLY
SELECT
AVG(t2.Average)
FROM
Table t1
CROSS APPLY (
SELECT Average = AVG(Value)
FROM (VALUES (Col1), (Col2), (Col3), (Col4)) B1(Value)
) t2
结果是65.221666