Вы, кажется, хотите:
select . . .,
count(distinct pid) over () as num_pids
from t
Увы, Postgres не поддерживает distinct
в оконных функциях. Один из обходных путей:
select . . .,
sum( (seqnum_pid = 1)::int ) over () as num_pids
from (select t.*, row_number() over (partition by pid order by pid) as seqnum_pid
from t
) t
Некоторые люди предпочитают метод dense_rank()
вместо:
select . . .,
max( seqnum_pid ) over () as num_pids
from (select t.*, dense_rank() over (order by pid) as seqnum_pid
from t
) t