mysql - 选择平均投票但使用 mysql 忽略前 5% 和后 5% 的选票

标签 mysql select average

我有一张有选票的 table 。投票只是数字(没有文字,没有是/否等)。

原始数据示例

id   | question_id | vote
1    | 63          | 80
2    | 63          | 13
3    | 63          | 992
...
100  | 63          | 900000
101  | 63          | 5

我想得到一个特定问题的平均值,但忽略了最高和最低 X% 的选票(例如:省略 5% - 所以对于每 100 票,我平均只得到 90 票) - 不是通过 id,而是通过投票数的最大值和最小值。

在上表中,900000 和 5 不会被计入 avg(假设他们是这个问题的最高票和最低票)

最佳答案

这个查询应该完成工作(see example on 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
;

子查询使用变量为每条记录分配一个行号,外部查询删除最低和最高的数字。

关于mysql - 选择平均投票但使用 mysql 忽略前 5% 和后 5% 的选票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14109547/

相关文章:

计算 c 中用户输入的平均值

c# - 微软与mysql同步框架?

mysql - 将大连接查询与重复查询相结合

php - 连接太多 - MySQL - 2GB RAM

php - 如何在一个mysql表中按特定年份过滤特定类(class)?

mysql - 检查新用户名是否不在两个单独的表中

java - 从用户那里收集一个数组,打印最小的数字,最大的数字,计算平均值和中位数

php - mySQL AVG - 一种为 AVG 合并两个结果的方法

mysql - 是否有 SQL 选择限定符来执行 Skip() 和 Take()

jquery - 如何在 IE9 中使用 JQuery 设置选择框的默认值?