我有一个表有一个名为的数字列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上运行的解决方案.
实现这一目标的最佳方法是什么?
在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)