SQL Server:在同一个表中查找多列的中位数

时间:2012-09-10 10:05:54

标签: sql tsql sql-server-2008-r2 median

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

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

我需要找到每个组的每个时间间隔的中位数。 我一直在为每个列分别计算中位数并对它们进行UNIONing,然后PIVOTing得到最终结果:

GroupByColumn Median1 Median2 Median3

使用解决方案中提供的查询Function to Calculate Median in Sql Server

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

原始表有500K行,并且尝试为每列分别计算中位数是很慢的。 是否有一种表现良好的方式可以在单个查询中为我提供所有列的中位数,而无需为每个列单独计算?

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

不要担心性能。排名函数应该只排序所需的列,而不是整个数据集。性能主要受到有多少数据适合内存的影响。由于原始数据适合内存,并且每列的排名应该是内存中的排序,因此性能应该非常好。

对于记录,有O(n)算法用于查找中位数。但是我不知道有任何实现它们的数据库。