我有一个数据库,其中某些记录用 ID 标记,我想创建一个 View ,其中包含所有具有相同 ID 的记录的平均值,不包括当前记录。例如,如果我的数据如下所示:
ROW - ID - Value
1 1 20
2 1 30
3 1 40
4 2 60
5 2 80
6 2 40
7 3 50
8 3 20
9 3 40
我的 View 需要计算具有相同 ID 的每一行的平均值,不包括它所在的行,所以我的输出看起来像这样:
ROW - ID - Value AVG
1 1 20 35
2 1 30 30
3 1 40 25
4 2 60 60
5 2 80 50
6 2 40 70
7 3 50 30
8 3 20 55
9 3 40 35
因此,在第 3 行的情况下,它提取了第 1 行和第 2 行,因为它们具有相同的 ID 并给出了它们的平均值 - 25。
我已经在这方面绕过房子有一段时间了,但似乎无法钉牢它。任何帮助将不胜感激。
最佳答案
一个选项,如果你有窗口函数
Declare @YourTable table (ROW int,ID int,Value int)
Insert Into @YourTable values
(1, 1, 20),
(2, 1, 30),
(3, 1, 40),
(4, 2, 60),
(5, 2, 80),
(6, 2, 40),
(7, 3, 50),
(8, 3, 20),
(9, 3, 40)
Select *
,Avg = (sum(value) over (Partition By ID)-Value)/NullIf((sum(1) over (Partition By ID)-1),0)
From @YourTable
另一种选择是外部应用
Select A.*
,B.*
From @YourTable A
Outer Apply (Select Avg=avg(value)
From @YourTable
where ID=A.ID and Row<>A.Row
) B
都返回
关于sql - 在不包括当前行的SQL中计算Avg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144016/