我想有一个计算所得的字段,该字段可为我提供表中列值的百分位数。最好的方法是什么?

我有一张表,其中只有一列,其值的范围从0到10000,是随机分布的。我想添加另一列,以告诉我相对于原始列中所有其他值,同一行上的值的百分位数是多少。

有2个百分位定义,如下所述:http://onlinestatbook.com/chapter1/percentiles.html

我使用的是我所知道的定义。示例:值处于第25个百分位表示25%的人口处于AT或低于该值。

我正在考虑的算法如下,我希望有人可以为我将其转换为SQL,因为我是SQL初学者:

对于表中的所有行,如果该值小于或等于当前行中的值,则计数++。在表的末尾,我进行除法:计数/具有我的百分位数的行数。这对我来说足够准确,因为有很多行。

最佳答案

[编辑以匹配有问题的评论]:

SELECT Number, 100 * (ROW_NUMBER() OVER (ORDER BY Number))/Count(*) AS Percentile
FROM MyTable


然后,如果您的Number是2、5、10和14,则应该得到:

Number   Percentile
2        25
5        50
10       75
14       100


问题出在这里:如果有重复项,那么ROW_NUMBER会让您烦恼。如果您的Number是2、5、5和14,则上面的代码将为您提供:

Number   Percentile
2        25
5        50
5        75
14       100


所以...改为这样做。

SELECT Number, MAX(100 * (ROW_NUMBER() OVER (ORDER BY Number))/Count(*)) AS Percentile
FROM MyTable
GROUP BY Number


如果您的数字是2、5、5、14,则应返回

Number   Percentile
2        25
5        75
14       100

07-26 09:30