PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como implementar a contagem do Oracle (distinta) sobre a partição no Postgres


Postgres não suporta count(distinct) diretamente. Mas você pode implementá-lo com uma subconsulta:
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
      . . .
     ) . . .

A ideia é simples. Calcular row_number() na partition by chaves e a coluna distinta. Em seguida, basta somar o número de vezes em que o valor é "1". Isso requer uma subconsulta, porque você não pode aninhar funções de janela.