SQL:找到百分位数

时间:2009-09-11 10:31:20

标签: sql

我有一个表格,其中包含一个名为Score的特定数字列。我想在该表上执行一个查询,其结果将有100行,每行代表与该百分位对应的分数。例如,结果可能如下所示:

 Percentile | Score
---------------------
 01         | 10
 02         | 12
 03         | 12
 04         | 17
 ...        | ...
 99         | 1684
 100        | 1685

上面结果表中的分数值是原始表中存在的实际分数值,并且未进行插值。插值结果会更好,但不是必需的。

可能有几种启发式方法可以产生这样的结果。我今天使用的(在代码中)基本如下 - 与百分位数对应的分数值将是分数值,其中:分数较小的行数除以总行数,四舍五入为整数,等于百分位数(我希望很清楚)

我可以考虑其他启发式方法,如果它们更容易实现

我正在使用MS-SQL,但我很欣赏也适用于MySQL的解决方案。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:5)

SQL Server

SELECT  percentile, score
FROM    (
        SELECT  ROW_NUMBER() OVER (PARTITION BY percentile ORDER BY score) AS rn, percentile, score
        FROM    (
                SELECT  score, NTILE(100) OVER (ORDER BY score) AS percentile
                FROM    mytable
                ) q
        ) q2
WHERE   rn = 1