计算Sql Server 2014中的百分位数范围

时间:2016-03-31 11:38:30

标签: sql sql-server tsql ssas

我使用Sql Server 2014,我可以获得所有附加组件,SSAS,无论需要什么。

我有一个表,为简单起见,包含一个带整数的列。假设它包含10 ^ 5 - 10 ^ 6行,这是安全的。

我想计算第5,第10,第15 ......第90,第95百分位数。

我可以通过调用percentile_cont(或_disc)18次来轻松完成。不幸的是,它需要永远。

问题是,我很确定这些电话一遍又一遍地做同样的事情。

有没有办法更快地计算表格上的百分位数范围?

我可以轻松地在C#中执行此操作,方法是将所有行加载到内存中,对它们进行排序,然后只需要0.05 * array.Length项目,0.1 * array.Length项目等等 - 它显然非常快速。我当然可以通过使用表变量或临时表来复制它,但我很惊讶没有一些内置的方式。

1 个答案:

答案 0 :(得分:2)

一种方法是使用ntile()和聚合:

select nt, min(num), max(num), count(*)
from (select t.*, ntile(20) over (order by num) as nt
      from t
     ) t
group by nt
order by nt;

我还应该补充一点,SQL Server应该在窗口函数的列上使用索引。因此,您可以通过添加索引来加快您的方法。