2015-01-11 2 views
5

나는로드 테스트를 위해 100 만 응답 타이밍을 저장하는 테이블을 가지고 있는데, 이제이 데이터를 100 개의 그룹으로 나눌 필요가 있습니다. 즉, 처음 500 개의 레코드를 하나의 그룹으로 나눠야합니다. 평균보다는 각 그룹의 백분위 수입니다. ,포스트그레스에서 백분위 수를 계산하는 방법

지금까지 내가이 쿼리

Select quartile 
    , avg(data) 
    , max(data) 
    FROM (

     SELECT data 
      , ntile(500) over (order by data) as quartile 
      FROM data 
     ) x 
GROUP BY quartile 
ORDER BY quartile 

을 시도했지만 내가 어떻게

답변

6

ntile 하나는 분위수, 분위와 같은 다른 N-타일, 중 (백분위 계산하는 방법이다 백분위를 찾을 수 있나요 기타.).

ntile 테이블을 지정된 수의 버킷으로 가능한 한 동등하게 그룹화합니다. 4 버킷을 지정하면이 값이 4 분위수가됩니다. 10은 십분의 일입니다. 500 여기에 오는 곳이 데이터 인 백분위 수를 결정하려면

백분위를 들어, 당신은 ... 잘 모르겠어요 (100)

로 버킷의 수를 설정합니다 (즉 백만 번 타이밍을 100 개의 버킷으로 가능한 한 균등하게 나눕니다.) ntile을 인수 100으로 사용하고 그룹에 500 개 이상의 항목이 있어야합니다.

avg이나 max에 대해 신경 쓰지 않는다면 검색어에서 묶음을 삭제할 수 있습니다. 그래서 다음과 같이 보일 것입니다 :

SELECT data, ntile(100) over (order by data) AS percentile 
FROM data 
ORDER BY data 
+0

각 그룹에는 100 개의 그룹이 있으므로 500 개의 레코드가 포함됩니다. 따라서 ntile은 백분위 수를 자동으로 계산합니까? 각 그룹마다? – lampdev

+0

"각 그룹에 500 개의 레코드가 포함되어 있습니다." 어떤 그룹입니까? 모든 데이터는'data' 테이블에 있습니다. 그 데이터에 대한'ntile (100)'은 데이터를 100 개의 그룹으로 묶을 것입니다. 이것이 주어진 데이터 집합에 대한 백분위 수를 계산하는 방법입니다. 먼저 500 그룹으로 나누면 더 이상 백분율이됩니다 ... – khampson

+0

오름차순에서 내림차순으로가는 백분위 수 그래프를 작성해야합니다. 테이블에는 50,000 개의 타이밍이 포함되어 있습니다. 이제이 50,000 개의 시간을 나누어야합니다. 그룹과 각 그룹에 대한 백분위 수를 계산, 나는 거의 이것에 대해 혼란스러워. 또는 우리가 이것을 달성 할 수있는 방법 – lampdev

4

을 일반적으로, 당신은 백분위를 알고 싶어 당신이 ntile보다 cume_dist를 사용하여 더 안전합니다. 이는 입력이 거의 없을 때 ntile이 이상하게 동작하기 때문입니다. 고려 :

=# select v, 
      ntile(100) OVER (ORDER BY v), 
      cume_dist() OVER (ORDER BY v) 
    FROM (VALUES (1), (2), (4), (4)) x(v); 

v | ntile | cume_dist 
---+-------+----------- 
1 |  1 |  0.25 
2 |  2 |  0.5 
4 |  3 |   1 
4 |  4 |   1 

당신은 ntile 만 사용하고 있음을 알 수 있습니다 cume_dist 항상 0 1로에서 번호를 부여 (100) 양동이, 중 첫 4 99 번째 백분위 수를 찾으려면 그래서, 당신은 단지 수 0.9932 미만의 cume_dist으로 모든 것을 버리고 남은 부분에서 가장 작은 숫자 v을 가져옵니다.

Postgres 9.4 이상을 사용하는 경우 percentile_cont and percentile_disc을 사용하면 버킷을 직접 만들 필요가 없으므로 훨씬 쉽게 만들 수 있습니다. 전자는 값 사이에 보간법을 제공하기도합니다. 작은 데이터 세트가있는 경우 유용 할 수 있습니다.

관련 문제