剔除 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
我正在尝试 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