选择平均投票但使用mysql省略最高和最低5%的投票

joe*_*tor 1 mysql select average

我有一张投票表.投票只是数字(没有文字,没有是/否等).

原始数据示例

id   | question_id | vote
1    | 63          | 80
2    | 63          | 13
3    | 63          | 992
...
100  | 63          | 900000
101  | 63          | 5
Run Code Online (Sandbox Code Playgroud)

我想得到一个特定问题的平均值,但遗漏了最高和最低X%的投票(例如:省去5% - 所以每100票我只能得到90票) - 不是由id而是由max和投票数的最小值.

在上表中,平均值不考虑900000和5(假设它们是此问题的最高和最低票数)

Pet*_*ang 6

此查询应该完成这项工作(请参阅SQL Fiddle上的示例):

SELECT AVG(vote) FROM
(
  SELECT vote, @r:=@r+1 AS rownum
  FROM votes, (SELECT @r:=0) x
  WHERE question_id = 63
  ORDER BY vote
) x
WHERE rownum > @r * .05
  AND rownum <= @r * .95
;
Run Code Online (Sandbox Code Playgroud)

子查询使用变量为每条记录分配rownumber,外部查询删除最低和最高的数字.