2013-10-29 7 views
1

주어진 데이터 집합에서 95 백분위 수 값을 계산하는 방법을 알아 내려고합니다. 아래의 T-SQL을 사용하여 95 백분위 수 값 을 데이터 세트에서 가져올 수 있지만 아래 코드는 항상 에서 데이터 세트을 제공합니다. 예를 들어데이터 집합에서 95 백분위 수 값 계산 (반드시 그렇지는 않음)

SELECT MIN(Value) 
FROM 
(
    SELECT TOP 95 PERCENT WITH TIES Value 
    FROM [Sample].[dbo].[numbers] 
    ORDER BY Value DESC 
) AS Temp 

데이터 세트 23, 5, 11, 22, 25, 14, 95 번째 백분위 수 값은 엑셀 당 24.5이지만, SQL 서버가이 값을 리턴하지 않을 데이터 세트에 없습니다.

의견이 있으면 알려주세요.

도움을 주셔서 미리 감사드립니다.

+0

거기에 백분위 수의 유형이 두 가지 이상 있으므로 원하는 것을 알고 있어야합니다. sql만으로는 불가능할 수도 있습니다. 이런 식으로해야만 할 때 sql의 레코드를 얻었고 백분율을 ColdFusion으로 계산했습니다. –

+0

어떻게 24.5를 얻습니까? – sgeddes

+0

@sgeddes. . . 그것은 배포에 대한 근본적인 가정을하고 있습니다. 올바른 대답은 SQL이 반환해야하는 25라고 생각합니다. Excel에서 보간을 수행 할 수있는 이유는 짝수 행이있을 경우 중앙값을 처리하기 위해서입니다. 그럼에도 불구하고 두 중간 값 사이의 모든 숫자는 똑같이 유효합니다. 따라서 중간 값과 끝점 중 하나의 값에 대한 인수가 있습니다. –

답변

0

"보간 된"중간 값을 원하는 것처럼 보입니다. Yucch. 그러나 SQL로이 작업을 수행 할 수 있습니다. 그냥 계산에 명시 :이 때문에 평등의 정확히 20 행 (그래서 95 %가 19 배 위치에있을 것입니다)의 배수가 존재하는 경우에 작동

select (max(case when rownum <= 0.95 * total then value end) + 
     min(case when rownum >= 0.95 * total then value end) 
     )/2.0 as Interpolated_95th 
from (SELECT n.*, row_number() over (order by value) as rownum, 
      count(*) over() as total 
     FROM [Sample].[dbo].[numbers] n 
    ) t 

주 - min()max()은 동일합니다. 다른 경우에도 작동하면 항상 두 값 사이의 중간 지점을 반환합니다.

참고 : 실제로 이것이 SQL에서 반환하는 값보다 더 유효하지 않다고 생각합니다. 중앙값과 백분위 수의 정의에 따라 두 값 사이의 값은 똑같이 유효하며 양쪽 극단 값을 사용하는 것에 대한 좋은 논증이 있습니다. 즉, 나는 현실 세계에서이 일을해야한다는 것을 크게 인식 할 수 있습니다.

+0

도움을 주셔서 감사합니다. 행 수가 20의 배수가 아닌 경우 위의 논리가 작동하지 않으면 확인하십시오. 다시 감사합니다/ – sam

+0

@ sam1980. . . 위의 코드는 값의 수에 관계없이 값 (ala Excel)을 보간하는 데 사용됩니다. –

관련 문제