我想有一个计算所得的字段,该字段可为我提供表中列值的百分位数。最好的方法是什么?
我有一张表,其中只有一列,其值的范围从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