如何获得组中“中间”值的平均值?

2024-05-23

我有一个包含值和组 ID 的表(简化示例)。我需要获取中间 3 个值的每组的平均值。因此,如果有 1、2 或 3 个值,则它只是平均值。但如果有 4 个值,它将排除最高值,5 个值将排除最高值和最低值,等等。我正在考虑某种窗口函数,但我不确定是否可能。

http://www.sqlfiddle.com/#!11/af5e0/1 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

I'd like

GROUP_ID    AVG
1           10
2           15
3           21.6
4           45

使用分析函数的另一种选择;

SELECT group_id,
       avg( test_value )
FROM (
  select t.*,
         row_number() over (partition by group_id order by test_value ) rn,
         count(*) over (partition by group_id  ) cnt
  from test t
) alias 
where 
   cnt <= 3
   or 
   rn between floor( cnt / 2 )-1 and ceil( cnt/ 2 ) +1
group by group_id
;

演示 -->http://www.sqlfiddle.com/#!11/af5e0/59 http://www.sqlfiddle.com/#!11/af5e0/59

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获得组中“中间”值的平均值? 的相关文章

随机推荐