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(假设它们是此问题的最高和最低票数)
此查询应该完成这项工作(请参阅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,外部查询删除最低和最高的数字.