2014-09-17 8 views
0

여러 행/여러 열의 결과를 기반으로 두 개의 열 값을 계산할 테이블이 있습니다. 기본 키는 처음 두 열 (tag, qid)에 설정됩니다. 두 필드 (연속 및 합계)의 값을 설정하고 싶습니다. "serial"열 값은 각 (tag, qid)에 대해 고유합니다. 따라서 동일한 태그가있는 레코드가 2 개있는 경우 일련 번호가 1 인 레코드 하나와 일련 번호가 2 인 레코드 두 개가 있어야합니다. 직렬은 우선 순위 필드에 따라 계산되어야하며, 높은 우선 순위 값이 먼저 직렬화를 시작해야합니다.postgresql에서 여러 행/여러 열의 결과를 기반으로 값을 설정/serialize하는 방법

은 "총"열 ... 테이블의 각 태그의 총 수는

가 나는 등, 저장 프로 시저/커서를 만드는 대신 일반 SQL에서이 작업을 수행하고자하는

는 IS 아래 표는 모든 유효한 설정을 보여줍니다.

                                  
 +----+----+--------+-------+-----+   
 |tag |qid |priority|serial |total|   
 +--------------------------------+   
 |abc | 87 |  99    |  1    |  2  |   
 +--------------------------------+   
 |abc | 56 |  11    |  2    |  2  |   
 +--------------------------------+   
 |xyz | 89 |  80    |  1    |  1  |   
 +--------------------------------+   
 |pfm | 28 |  99    |  1    |  3  |   
 +--------------------------------+   
 |pfm | 17 |  89    |  2    |  3  |   
 +--------------------------------+   
 |pfm | 64 |  79    |  3    |  3  |   
 +----+----+--------+-------+-----+   
  

많은 감사

답변

0

당신은 쉽게 윈도우 함수를 사용하여이 정보가 설정 결과를 반환 할 수 있습니다 : 이것은 영리

select tag, qid, priority, 
     row_number() over (partition by tag, qid order by priority desc) as serial, 
     count(*) over (partition by tag, qid) as total 
from table t; 
+0

! 잘하고 많은 감사 –