Postgres nie obsługuje count(distinct)
bezpośrednio. Ale możesz to zaimplementować za pomocą podzapytania:
select . . .,
sum( (seqnum_tm = 1)::int) as mob_segments_count ,
sum( (seqnum_tr = 1)::int) as countries_count
from (select . . .,
row_number() over (partition by pm.trans_id, pm.country_reg_region_cd order by pm.country_reg_region_cd) as seqnum_tr,
row_number() over (partition by pm.trans_id, pm.mobseg_state order by pm.pm.mobseg_state) as seqnum_tm
. . .
) . . .
Pomysł jest prosty. Oblicz row_number()
na partition by
klucze i odrębną kolumnę. Następnie po prostu zsumuj, ile razy wartość wynosi „1”. Wymaga to podzapytania, ponieważ nie można zagnieżdżać funkcji okna.