Monday, June 14, 2010

How to Calculate Median in SQL Server 2005?

create table tblmedian(iSno int identity(1,1),iMedian int)

insert into tblmedian values(20)
insert into tblmedian values(21)
insert into tblmedian values(22)
insert into tblmedian values(23)
insert into tblmedian values(24)


create function [dbo].[UDF_Find_Median]()
returns int
as
begin
declare @Cnt int
declare @MidId1 int
declare @MidId2 int
declare @Result1 int
declare @Result2 int
declare @Retval int

select @cnt=count(*) FROM tblmedian;
if(@cnt%2=1)--odd number
begin
set @midid1=floor(round(cast(@cnt as float) / cast(2 as float),0))
select @retval=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median where rowid=@midid1;
end
else
begin
set @midid1=floor(@cnt/2);
set @midid2=(@midid1+1);

select @result1=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median1 where rowid=@midid1;

select @result2=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median2 where rowid=@midid2;

set @retval=floor((@result1+@result2)/2);
end
return @retval;
end

select * from tblmedian

select [dbo].[udf_find_median]()

No comments:

 
Feedback Form