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

Cull top and bottom % of SQL result; exclude percent on query?

我正在尝试 select 数据库中的行,但从结果中排除了顶部和底部的 10%。考虑如下 table:

  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 行缺乏技巧。必须有更简单的方法来做到这一点。

我该如何完成?

您可以使用 RowNumber() 进行如下尝试,我尚未测试查询可能需要根据您的需要进行更改,这里的 @From 和 @To 是 80% 的值在当前情况下是 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