我正在尝试从数据库中选择行,但从结果中排除前10%和后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
行和最后一行缺乏技巧。必须有一种更简单的方法来执行此操作。
我将如何完成?
您可以尝试使用,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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句