首页 > 解决方案 > 如何在 SQL 中重用为不同列中的列计算的平均值?

问题描述

我想做的是计算特定列的平均值,然后使用该数字并从另一列的每个条目中减去它。

让我们考虑包含两个可能值(例如 TypeA 和 TypeB)的第一列 (Col_1)。这个想法是计算 TypeA 的第二列 (Col_2) 的平均值,然后从 Col_1 值为 TypeB 的第三列 (Col_3) 的每个条目中减去该数字。

在 SQL 中,我提出了该查询:

Select T1.Col_1
      ,T2.Avg1
      ,Case When T1.Col_1 = 'TypeB' Then T1.Col_3 - T2.Avg1 End as New_Col_3
from Table1 as T1

Inner Join
(
Select Case When Col_1 = 'TypeA' Then avg(Col_2) End as Avg1
From T1
Group by Col_1
) as T2 on T1.Col_1 = T2.Col_1

问题是当 Col_1 值为 TypeB 时 Avg1 为 NULL,所以基本上它不起作用。

如何重用 Avg1 并获得所需的结果?

提前致谢!

标签: sql

解决方案


这样做,在子查询中计算两者

Select T1.Col_1
      ,T2.AvgA
      ,T2.AvgA - T2.AvgB
from Table1 as T1

Inner Join
(
Select Col_1,
       Case When Col_1 = 'TypeA' Then avg(Col_2) End as AvgA,
       Case When Col_1 = 'TypeB' Then avg(Col_2) End as AvgB
From Table1 T1
Group by Col_1
) as T2 on T1.Col_1 = T2.Col_1

推荐阅读