Вычисление перцентиля на T-SQL

добавлено: 30 мар 13
понравилось:0
просмотров: 1240
комментов: 0

теги:

Автор: Алексей Дружинин

Абсолютно неоригинальная задача, но для тех, кто ищет готовое решение, а не советы/ссылки - примерно так:

create type dbo.FloatArray as table (Val float not null);
go
create function dbo.GetPercentil(@Percent tinyint, @Values dbo.FloatArray readonly) 
returns float
as begin
	return (select	avg(p.Val)
	from	(
				select	mr.Val 
					,	IsPercentilVal = cast(case when mr.RowNum between mr.PercentRow and mr.PercentRow + 1 then 1 else 0 end as bit)
				from	(
							select	r.Val 
								,	r.RowNum 
								,	PercentRow	= cast((count(*) over()) * @Percent / 100.0 as float)
							from	(
										select	v.Val 
											,	RowNum = row_number() over (order by v.Val)
										from	@Values as v
									) as r
						) as mr
			) as p
	where	p.IsPercentilVal = 1);
end;

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии