剔除SQL结果的顶部和底部%;排除查询百分比?

时间:2015-02-10 05:53:11

标签: sql pdo

我尝试从数据库中选择行,但从结果中排除最高和最低10%。考虑如下表:

  id | score
--------------
   1 |   9
   2 |   7
   3 |   9
   4 |   6
   5 |   1
   6 |   9
   7 |   8
   8 |   5
   9 |   1
  10 |   9

使用以下SQL ...

SELECT SUM(score)/COUNT(*)
    FROM reviews
    ORDER BY score

它会产生6.4的平均值。我希望它忽略顶部和底部的10%,但平均值为6.75

我已经研究了几种方法来实现这一目标。我TOP # PERCENT并没有像我希望的那样工作。排除第一行和最后COUNT(*)*0.1行缺乏技巧。必须有一种更简单的方法来做到这一点。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用RowNumber(),如下所示,我还没有测试过查询可能会根据您的需要进行更改,这里@From和@To是您的值的80%&#39 ; s在当前情况下是2和9

    WITH NumberedMyTable AS
    (
       SELECT
         Id,
         Score,
         ROW_NUMBER() OVER (ORDER BY score) AS RowNumber
     FROM
        MyTable
    )
  SELECT
     SUM(score)/COUNT(*)
  FROM
     NumberedMyTable
  WHERE
      RowNumber BETWEEN @From AND @To