2012-11-20 4 views
2

PostgreSQL SQL SELECT 결과가 있습니다. 행을 5 분위수로 나누고 5 행의 값을 특정 행으로 업데이트해야합니다.PostgreSQL - 쿼리 결과를 5 분위수로 나눕니다.

응용 프로그램에서 필요없이 SELECT에이 요구 사항을 수행 할 수 있습니까? 나는 응용 프로그램에 데이터를 선택하고 PostgreSQL 서버의 순위를 매길 필요가있을 때 상황을 피하고자합니다.

데이터 예 -

4859 - 5 
4569 - 5 
4125 - 4 
3986 - 4 
3852 - 3 
3562 - 3 
3452 - 2 
3269 - 2 
3168 - 1 
3058 - 1

감사합니다 quintil 첫 번째 열은 값이, 두 번째 열이다.

답변

6

이것을 생성하려면 "ntile"이라고하는 창 함수가 있습니다.이 출력을 다루는 "타일"의 개수를 지정하는 매개 변수를이 매개 변수에 입력해야합니다 (이 경우 5 개). 예를 들어

:

select t.id, ntile(5) over (order by t.id) 
from t 

제공 한 표준 것들의 목록 창 기능에 대해 소개 window function tutorialwindow functions를 참조하십시오.

+0

우리는 창 함수를 사용하지 않고 어떻게 할 수 있었습니까? 나는 과거에 클라이언트 측 처리, 복잡한 SQL, PL/PgSQL 등을 사용했을지도 모르는 곳에서 자주 사용하는 것으로 나타났습니다. –

+0

@CraigRinger : 9.3이 나온 후 우리는 "lateral"에 대해서도 같은 말을하고 있을까요? (나는 과거에 그것을 원했다는 것을 알고있다.) – araqnid

+0

오, 그렇게 할 것이다. LATERAL이 작업을 매우 훌륭하게 수행 한 경우 중첩 쿼리를 통해 Pg의 SRF-in-SELECT 구문을 사용하기 위해 몇 가지 쿼리를 아주 맹렬히 조작해야했습니다. –

관련 문제