2016-07-17 6 views
0

조인 테이블 ab을 통해 ab의 두 테이블을 조인하는 select가 있습니다.조인의 분산 된 행에 대한 행 번호를 증분으로 계산 선택

select a.*, b.* 
from a 
left join ab on a.id = ab.aid 
left join b on b.id = ab.bid; 

그리고이

id | athing | id | bthing 
----+----------+----+----------- 
    7 | athing x | 1 | bthing a 
    7 | athing x | 2 | bthing b 
    7 | athing x | 3 | bthing c 
    3 | athing y | 1 | bthing a 
(4 rows) 

을 생산 나는 점진적으로 a의 행 수를 계산 열을합니다.

count | id | athing | id | bthing 
-------+----+----------+----+----------- 
    1 | 7 | athing x | 1 | bthing a 
    1 | 7 | athing x | 2 | bthing b 
    1 | 7 | athing x | 3 | bthing c 
    2 | 3 | athing y | 1 | bthing a 
(4 rows) 

가 나는 윈도우 함수 row_number()를 사용하여 살펴 보았다,하지만 모든 행을 계산하는 것 같다 때문입니다.

조인 된 테이블이 만드는 행 수에 관계없이 고유 한 a 행을 점차적으로 계산하려고합니다.

Postgresql에서 가능합니까? 고맙습니다.

답변

1

사용 row_number() 테이블 a에서 선택 (참고, a의 행의 순서는 over 절에 정의) :

select a.*, b.* 
from (
    select row_number() over (order by id desc) as count, * 
    from a 
    ) a 
left join ab on a.id = ab.aid 
left join b on b.id = ab.bid; 

count | id | athing | id | bthing 
-------+----+----------+----+---------- 
    1 | 7 | athing x | 1 | bthing a 
    1 | 7 | athing x | 2 | bthing b 
    1 | 7 | athing x | 3 | bthing c 
    2 | 3 | athing y | 1 | bthing a 
(4 rows) 

또는 결과 데이터 세트에 dense_rank().

select 
    dense_rank() over (order by a.id desc) as count, 
    a.*, b.* 
from a 
left join ab on a.id = ab.aid 
left join b on b.id = ab.bid; 

window functions을 읽어보십시오.