如何将同一列中的平均值和另一个值从新表中的两个不同列中获取?
我有这个:
Person_ID col2 col3_values
1 101010A 20000
1 101010B 30000
2 101010A 25000
2 101010B 30000
3 101010A 22000
3 101010B 24000
我想要一个表格,其中col3_values的平均值为ID:s,来自col1_ID(1,2,3),然后将此平均值与保存col1_ID:值的列进行比较,如下所示:
col2 AVG(value personID_1-3) Value PersonID_1
101010 A 22333 20000
101010 B 28000 30000
我尝试了很多代码但没有任何效果。有人可以帮我这个吗?如果这有效,我将不胜感激,如果我还能得到第四列,则显示平均列和第三列之间保持ID_1:s值的差异。
答案 0 :(得分:0)
有很多方法可以做到这一点,一种方法是使用outer apply
构造:
select
col2,
AVG(t.col3_values) as "AVG(value personID_1-3)",
a.col3_values as "Value PersonID_1",
AVG(t.col3_values) - a.col3_values as "Difference"
from your_table t
outer apply (
select col3_values from your_table where Person_ID = 1 and t.col2 = col2
) a
group by col2, a.col3_values
或者你可以使用相关的子查询:
select
col2,
AVG(t.col3_values) as "AVG(value personID_1-3)",
(
select col3_values from your_table where Person_ID = 1 and t.col2 = col2
) as "Value PersonID_1"
from your_table t
group by col2
示例输出:
Query 1:
col2 AVG(value personID_1-3) Value PersonID_1 Difference
-------------------- ----------------------- ---------------- -----------
101010A 22333 20000 2333
101010B 28000 30000 -2000
Query 2:
col2 AVG(value personID_1-3) Value PersonID_1
-------------------- ----------------------- ----------------
101010A 22333 20000
101010B 28000 30000