PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment implémenter Oracle count (distinct) sur la partition dans Postgres

Postgres ne prend pas en charge count(distinct) directement. Mais vous pouvez l'implémenter avec une sous-requête :

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'idée est simple. Calculer row_number() sur la partition by clés et la colonne distincte. Ensuite, additionnez simplement le nombre de fois où la valeur est "1". Cela nécessite une sous-requête, car vous ne pouvez pas imbriquer les fonctions de fenêtre.