Медиана в SQL Server 2000 - PullRequest
       0

Медиана в SQL Server 2000

1 голос
/ 05 сентября 2011

Для четных строк формула для медианы равна (104,5 + 108) / 2 для таблицы ниже, а для нечетных строк - 108 для таблицы ниже

Total       Total

100         100
101         101
104.5       104.5
108         108
108.3       108.3
112         112
            114

Код ниже работает в SQL Server 2008, но не в SQLServer 2000 как он не понимает row_number() и over.

Как мы можем изменить нижний код, чтобы он работал на SQL Server 2000?

select avg(Total) median from
(select Total, 
rnasc = row_number() over(order by Total),
rndesc = row_number() over(order by Total desc)
 from [Table] 
) b
where rnasc between rndesc - 1 and rndesc + 1

Ответы [ 2 ]

3 голосов
/ 05 сентября 2011

Если вам нужна только медиана, вы можете использовать этот простой запрос.

SELECT
(
  (SELECT MAX(Total) FROM
    (SELECT TOP 50 PERCENT Total FROM [Table] ORDER BY Total) AS BottomHalf)
  +
  (SELECT MIN(Total) FROM
    (SELECT TOP 50 PERCENT Total FROM [Table] ORDER BY Total DESC) AS TopHalf)
) / 2.0 AS Median

Источник: Функция для вычисления медианы в Sql Server

1 голос
/ 05 сентября 2011
SELECT Median = AVG(Total) FROM 
( 
    SELECT Total FROM ( 
        SELECT TOP 1 Total = Total * 1.0 FROM 
        ( 
            SELECT TOP 50 PERCENT Total 
            FROM dbo.[Table] ORDER BY Total 
        ) AS sub_a 
        ORDER BY 1 DESC 
    ) AS sub_1 
    UNION ALL 
    SELECT Total FROM ( 
        SELECT TOP 1 Total = Total * 1.0 FROM 
        ( 
            SELECT TOP 50 PERCENT Total 
            FROM dbo.[Table] ORDER BY Total DESC 
        ) AS sub_b 
        ORDER BY 1 
    ) AS sub_2 
) AS median;
...