Один из способов думать об этом: «процент студентов с баллами ниже этого».
Вот один из способов получить этот тип процентиля в SQL Server, используя RANK()
:
select *
, (rank() over (order by Score) - 1.0) / (select count(*) from @temp) * 100 as PercentileRank
from @temp
Обратите внимание, что это всегда будет меньше, чем 100%, если вы не округлите, и вы всегда получите 0% для самых низких значений.Это не обязательно означает, что медианное значение равно 50%, и не будет интерполироваться, как это делают некоторые вычисления в процентилях.
Не стесняйтесь округлять или приводить все выражение (например, cast(... as decimal(4,2))
) для хороших отчетов или дажезамените - 1.0
на - 1e
, чтобы форсировать вычисление с плавающей запятой.
NTILE()
на самом деле не то, что вы ищете в этом случае, потому что он по существу делит номера строк упорядоченного набора на группы, а нечем значения.Он назначит разные процентили двум экземплярам с одинаковым значением, если эти экземпляры окажутся между точкой пересечения.Затем вам нужно будет дополнительно сгруппировать по этому значению и взять максимальный или минимальный процентиль группы, чтобы использовать NTILE()
так же, как мы делаем с RANK()
.