sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo implementar el conteo de Oracle (distinto) sobre la partición en Postgres

Postgres no es compatible con count(distinct) directamente. Pero puedes implementarlo con una 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
      . . .
     ) . . .

La idea es sencilla. Calcular row_number() en la partición partition by claves y la columna distinta. Luego, simplemente sume la cantidad de veces que el valor es "1". Esto requiere una subconsulta, porque no puede anidar funciones de ventana.