我尝试从数据库中选择行,但从结果中排除最高和最低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
行缺乏技巧。必须有一种更简单的方法来做到这一点。
我将如何做到这一点?
答案 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