PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come implementare Oracle count (distinct) sulla partizione in Postgres

Postgres non supporta count(distinct) direttamente. Ma puoi implementarlo con una sottoquery:

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

L'idea è semplice. Calcola row_number() sulla partition by chiavi e la colonna distinta. Quindi, somma semplicemente il numero di volte in cui il valore è "1". Ciò richiede una sottoquery, perché non è possibile nidificare le funzioni della finestra.