PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zaimplementować Oracle count (distinct) na partycji w Postgresie?

Postgres nie obsługuje count(distinct) bezpośrednio. Ale możesz to zaimplementować za pomocą podzapytania:

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

Pomysł jest prosty. Oblicz row_number() na partition by klucze i odrębną kolumnę. Następnie po prostu zsumuj, ile razy wartość wynosi „1”. Wymaga to podzapytania, ponieważ nie można zagnieżdżać funkcji okna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z Sqlalchemy i wstawianiem tablicy jsonb do postgresql

  2. błąd pg instalacji gem:nie można zrozumieć wersji kern.osversion `14.0.0' na Yosemite z Ruby 2.1.5

  3. Jak utworzyć migrację rails, aby usunąć/zmienić precyzję i skalę dziesiętną?

  4. sprzężenie wewnętrzne i sprzężenie zewnętrzne; czy kolejność tabel jest ważna od?

  5. PostgreSQL:ograniczenie, które wpływa na wiele tabel