【问题标题】:SQL Server : Finding medians of multiple columns in the same tableSQL Server:在同一个表中查找多个列的中位数
【发布时间】:2012-09-03 04:28:00
【问题描述】:

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

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

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

GroupByColumn     Median1     Median2     Median3

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    由于计算中位数需要对数据进行排序,除非您的数据是有序的,否则除了独立排序和计算中位数之外别无选择。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-23
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 2020-05-13
        相关资源
        最近更新 更多