我有一组数据,其中包含定期收集的值。我想使用set的每个元素的当前值的2个左右邻居来计算中位数。
例如,集合为:
21
22
23
-10
20
22
19
21
100
20
对于第一个值,我们选择21
,22
,23
,中位数为22
。因此,对于21
,我们有22
。对于-10
,我们有22
,23
,-10
,20
,22
。中位数为22
。
我使用此方法来消除此集合中异常的“偏差”值。
我想我应该以某种方式使用median
分析函数。像这样:
SELECT (SELECT median(d.value)
FROM my_set d
WHERE d.key_val = s.key_val
AND d.order_value BETWEEN s.order_value - 2 AND s.order_value + 2) median_val
,s.key_val
,s.order_value
FROM my_set s
我很高兴看到任何其他方法或一些改进的方法来解决此问题。
答案 0 :(得分:1)
您没有为表结构指定任何内容,因此我只是从您的SQL中猜测有什么字段以及它们的含义,但请考虑这样的尝试:
SELECT s1.key_val, s1.order_value, s1.value, MEDIAN(s2.value) as med
FROM my_set s1
LEFT OUTER JOIN my_set s2
ON s2.key_val = s1.key_val
AND (s1.order_value - 2) <= s2.order_value
AND s2.order_value <= (s1.order_value + 2)
GROUP BY s1.key_val, s1.order_value, s1.value