SQL - 添加带有 Count() 的列

SQL - Add Column With Count()

我只想在下面给出的来自 "select count(*) ... group by possession" 的结果中添加一列。所以它应该仍然保留相同的行数,并添加这个列。我被告知要研究横向连接,但我不明白如何去做,尤其是在我的查询上下文中有 CTE

查询

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

您可以使用 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)