【发布时间】:2025-12-18 07:45:01
【问题描述】:
我有一个包含值和组 ID 的表(简化示例)。我需要得到中间 3 个值的每组的平均值。因此,如果有 1、2 或 3 个值,它只是平均值。但是如果有 4 个值,它将排除最高值,最高和最低值 5 个值,等等。我在想某种窗口函数,但我不确定它是否可能。
http://www.sqlfiddle.com/#!11/af5e0/1
对于这个数据:
TEST_ID TEST_VALUE GROUP_ID
1 5 1
2 10 1
3 15 1
4 25 2
5 35 2
6 5 2
7 15 2
8 25 3
9 45 3
10 55 3
11 15 3
12 5 3
13 25 3
14 45 4
我愿意
GROUP_ID AVG
1 10
2 15
3 21.6
4 45
【问题讨论】:
-
为什么要这样做?似乎是一个奇怪的使用要求。当您将行数扩大到数百万时,您是否仍只想平均 3 个值?对于偶数行,你总是想先去掉最高值,然后再去掉最低值吗?
-
@Vulcronos,会有很多很多的组,但每个组将包含 0 到 10 之间的值,大多数有 3-5 个值。这些值是测试结果,中间平均值和总体平均值之间的差异值得关注。
标签: sql postgresql