sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man implementerar Oracle count (distinct) över partition i Postgres

Postgres stöder inte count(distinct) direkt. Men du kan implementera det med en underfråga:

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

Tanken är enkel. Beräkna row_number()partition by nycklar och den distinkta kolumnen. Lägg sedan ihop antalet gånger då värdet är "1". Detta kräver en underfråga, eftersom du inte kan kapsla fönsterfunktioner.




  1. MySql:ta bort tabellrader beroende på kolumndubblettvärden?

  2. Oracle VÄLJ TOP 10 poster

  3. Hur kan du namnge datauppsättningens tabeller som du returnerar i en lagrad proc?

  4. 2nd Quadrant Deutschland – Special Training Opening Bargain