Вот как бы я поступил в SQL Server
Приведенный ниже запрос получит средний вес из вымышленной таблицы Scale, содержащей по одному взвешиванию для каждого человека, не позволяя тем, кто слишком толстый или худой, сбросить более реалистичное среднее:
select w.Gender, Avg(w.Weight) as AvgWeight
from ScaleData w
join ( select d.Gender, Avg(d.Weight) as AvgWeight,
2*STDDEVP(d.Weight) StdDeviation
from ScaleData d
group by d.Gender
) d
on w.Gender = d.Gender
and w.Weight between d.AvgWeight-d.StdDeviation
and d.AvgWeight+d.StdDeviation
group by w.Gender
Возможно, есть лучший способ сделать это, но он работает и работает хорошо. Если вы нашли другое, более эффективное решение, я бы хотел услышать об этом.
ПРИМЕЧАНИЕ. Приведенное выше снимает верхние и нижние 5% выбросов с картинки для целей среднего значения. Вы можете настроить количество удаленных выбросов, отрегулировав 2 * в 2 * STDDEVP согласно: http://en.wikipedia.org/wiki/Standard_deviation