选择前10%,也是SQL Server中的最低百分比

时间:2016-01-08 16:49:41

标签: sql-server sql-server-2008 percentile

我有两个问题:

  1. 使用select top 10 percent语句时,例如在具有100个分数的测试数据库上,如下所示:

    Select top 10 percent score 
    from test
    

    SQL Server会根据现在数据的样子返回10个最高分,或者只返回前10个分数(例如,如果数据以最低分数首先出现的方式输入数据库,那么这将返回最低分数10分)?

  2. 我希望能够在这100分中获得前10名最高分和最低10分,我该怎么办?

4 个答案:

答案 0 :(得分:4)

您还可以使用NTILE窗口功能将您的分数分组为10组数据 - 组号。 1将是最低的10%,组号。 10将是前10%:

;WITH Percentile AS
(
    SELECT
        Score,
        ScoreGroup = NTILE(10) OVER(ORDER BY Score)
    FROM
        test
)
SELECT * 
FROM Percentile
WHERE ScoreGroup IN (1, 10)

答案 1 :(得分:1)

使用UNION ALL表示它会将所有行计算两次。

您可以使用以下单个计数执行此操作。这是否更有效将取决于(例如索引)。

WITH T
     AS (SELECT *,
                1E0 * ROW_NUMBER()
                        OVER (
                          ORDER BY score) / COUNT(*)
                                                  OVER() AS p
         FROM   test)
SELECT *
FROM   T
WHERE  p < 0.1
        OR p > 0.9 

答案 2 :(得分:0)

select score from 
    (Select top 10 percent score
     from test
     order by score desc
    )a
union all   
select score from 
   (select top 10 percent score
    from test
    order by score asc
   )b

如果允许重复,请使用 union

答案 3 :(得分:0)

在查询中使用升序排名前90位。然后,在查询中降序排名前10位。然后,将这两个查询联合起来