Microsoft SQL Server 2005 Best Practices

How to calculate the median?

 

Execute the following to find the median of a randomly generated set of numbers:

USE AdventureWorks;

-- drop table #NumberList
create table #NumberList(NumberListID int identity(1,1),
X bigint not null)
go
set nocount on
declare @i int
set @i = 0
while(@i < 2001) begin
insert into #NumberList (X)
values (cast(rand() * 8589934591 as bigint))
set @i = @i + 1
end
go

with cteAvg as (
select [avg] = avg(X),
[min] = min(X),
[max] = max(X),
[stddev] = stdev(X)
from #NumberList ),

cteMedian as (
select X,
row_number() over (order by X asc) as high,
row_number() over (order by X desc) as low
from #NumberList)

select [avg] as average,
X as median,
[min] as minimum,
[max] as maximum,
[stddev] as 'standard deviation'
from cteMedian
cross join cteAvg
where high in (low, low+1, low-1)
go

 


 

The Best SQL Server 2005 Training in the World
 
 
SQLUSA.com Home Page