我使用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项目等等 - 它显然非常快速。我当然可以通过使用表变量或临时表来复制它,但我很惊讶没有一些内置的方式。
答案 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应该在窗口函数的列上使用索引。因此,您可以通过添加索引来加快您的方法。