sql >> Databáze >  >> RDS >> PostgreSQL

Jak implementovat Oracle count(distinct) přes oddíl v Postgresu

Postgres nepodporuje count(distinct) přímo. Ale můžete to implementovat pomocí poddotazu:

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

Myšlenka je jednoduchá. Vypočítejte row_number() na partition by klíče a samostatný sloupec. Poté stačí sečíst, kolikrát je hodnota "1". To vyžaduje dílčí dotaz, protože nemůžete vnořovat funkce okna.




  1. Použití pt-pg-summary Percona Toolkit pro PostgreSQL

  2. Sloupec funkce okna Postgres s kolejnicemi

  3. Nahrazení dvojitých uvozovek dvojitými uvozovkami v R

  4. počítání, kolikrát byl skript spuštěn