sql >> Database >  >> RDS >> PostgreSQL

Hoe Oracle count (distinct) over partitie in Postgres te implementeren

Postgres biedt geen ondersteuning voor count(distinct) direct. Maar u kunt het implementeren met een subquery:

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

Het idee is eenvoudig. Bereken row_number() op de partition by sleutels en de afzonderlijke kolom. Tel vervolgens het aantal keren op dat de waarde "1" is. Dit vereist een subquery, omdat u vensterfuncties niet kunt nesten.




  1. Hoe u de juiste database voor uw bedrijf kiest

  2. Hoe de tweede laatste rij van mysql te krijgen?

  3. Welke maat gebruikt u voor varchar(MAX) in uw parameterdeclaratie?

  4. JDBC Select batching/fetch-size met MySQL