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

Sådan implementeres Oracle count (distinct) over partition i Postgres

Postgres understøtter ikke count(distinct) direkte. Men du kan implementere det med en underforespørgsel:

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

Ideen er enkel. Beregn row_number()partition by taster og den særskilte kolonne. Derefter skal du bare lægge antallet af gange sammen, hvor værdien er "1". Dette kræver en underforespørgsel, fordi du ikke kan indlejre vinduesfunktioner.




  1. Eksporter tabel fra Postgres database (på server) til csv-fil (på lokal) i java

  2. Jquery for at udfylde <table> baseret på <select>

  3. php pdo emulate_prepares false stringify_fetches false int still string

  4. Sådan fungerer RIGHT()-funktionen i SQL Server (T-SQL)