PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So implementieren Sie Oracle count(distinct) über Partition in Postgres

Postgres unterstützt count(distinct) nicht direkt. Aber Sie können es mit einer Unterabfrage implementieren:

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
      . . .
     ) . . .

Die Idee ist einfach. Berechnen Sie row_number() auf der partition by Schlüssel und die eindeutige Spalte. Dann addieren Sie einfach die Anzahl der Male, wenn der Wert "1" ist. Dies erfordert eine Unterabfrage, da Sie Fensterfunktionen nicht verschachteln können.