2015-02-10 54 views
0

我試圖從數據庫中選擇行,但從結果中排除頂部和底部10%。考慮一個表如下:剔除SQL結果的頂部和底部%;排除查詢的百分比?

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行缺乏技巧。必須有一個更簡單的方法來做到這一點。

我該如何做到這一點?

回答

2

您可以使用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