0

我有一个具有以下结构的表。

create table FindMedians 
( GroupByColumn varchar(100) 
, TimeInterval_1 int 
, TimeInterval_2 int 
, TimeInterval_3 int 
);

我需要找到每组每个时间间隔的中位数。我一直在分别计算每列的中位数并将它们联合起来,然后 PIVOTing 得到最终结果:

按列分组 中位数1 中位数2 中位数3

使用函数在 Sql Server 中计算中位数的解决方案中给出的查询

注意:我只是使用查询,我还没有创建函数。

原始表有接近 500K 行,尝试分别计算每列的中位数很慢。是否有一种性能良好的方法可以在单个查询中为我提供所有列的中位数,而不必为每列单独计算?

谢谢

4

2 回答 2

1

由于计算中位数需要对数据进行排序,除非您的数据是有序的,否则实际上没有任何替代方法可以独立排序和计算中位数。

于 2012-09-10T12:58:40.777 回答
0

不用担心性能。排名函数应该只对需要的列进行排序,而不是对整个数据集进行排序。性能将主要受内存中适合多少数据的影响。由于原始数据适合内存,并且每一列的排名应该是内存中的排序,所以性能应该是相当不错的。

作为记录,有 O(n) 算法可以找到中位数。不过,我不知道有任何实现它们的数据库。

于 2012-09-10T14:13:00.577 回答