2016-06-10 121 views
1

我想简单地添加一列到下面给出的结果来自“select count(*)... group by possession”。所以它应该仍然保留相同数量的行,并且添加了这个列。有人告诉我,寻找到一个横向加入,但我不知道如何做到这一点尤其是在具有CTE我查询的上下文SQL - 添加列与计数()

QUERY

select 
* 
from (
     with possession_change as (
     select 
      (lag(possession,1) over (order by id)) as last_possession, 
      possession, 
      clock 
     from plays 
     where 
      game_id in (583615) 
      and league = 3 
      and period in (0,1) 
     ) 
     select * from possession_change 
    ) stuff 
; 

成绩

last_possession | possession | clock 
-----------------+------------+------- 
       |   0 | 3600 
       0 |   0 | 3600 
       0 |   0 | 3600 
       0 |   0 | 3600 
       0 |   1 | 3561 
       1 |   1 | 3561 
       1 |   1 | 3561 
       1 |   1 | 3449 
       1 |   1 | 3449 
       1 |   0 | 3396 
       0 |   0 | 3396 
       0 |   0 | 3396 

理想的结果

last_possession | possession | clock | possession_count 
-----------------+------------+------- 
       |   0 | 3600 | 7 
       0 |   0 | 3600 | 7 
       0 |   0 | 3600 | 7 
       0 |   0 | 3600 | 7 
       0 |   1 | 3561 | 5 
       1 |   1 | 3561 | 5 
       1 |   1 | 3561 | 5 
       1 |   1 | 3449 | 5 
       1 |   1 | 3449 | 5 
       1 |   0 | 3396 | 7 
       0 |   0 | 3396 | 7 
       0 |   0 | 3396 | 7 

回答

2

您可以使用count over

select 
    lag(possession,1) over (order by id) as last_possession, 
    possession, 
    clock, 
    count(*) over (partition by possession) cnt 
from plays 
where 
    game_id in (583615) 
    and league = 3 
    and period in (0,1)