SQL:找到百分位数

Roe*_*ler 5 sql

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

 Percentile | Score
---------------------
 01         | 10
 02         | 12
 03         | 12
 04         | 17
 ...        | ...
 99         | 1684
 100        | 1685
Run Code Online (Sandbox Code Playgroud)

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

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

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

我正在使用MS-SQL,但希望能够在MySQL上运行的解决方案.

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

Qua*_*noi 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
Run Code Online (Sandbox Code Playgroud)