2017-04-19 73 views
2

這是我在選擇語句中的sql示例。從oracle轉換爲postgres,需要一種簡單的方法來重新實現Oracle數據在postgres中的分區。如何在Postgres中通過分區實現Oracle計數(獨特)

, count(distinct on pm.mobseg_state) over (partition by pm.trans_id) as mob_segments_count 
, count(distinct on pm.country_reg_region_cd) over (partition by pm.trans_id) as countries_count 
+0

我不認爲你可以在Oracle或Postgres的窗口函數中使用'distinct'。 –

+0

目前在oracle中使用。尋找適合postgres的解決方案。 – Water223

回答

0

Postgres不直接支持count(distinct)。但是你可以用子查詢來實現它:

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

這個想法很簡單。根據partition by鍵和不同的列計算row_number()。然後,只需加上值爲「1」的次數。這需要一個子查詢,因爲你不能嵌套窗口函數。

+0

結束實施此版本。謝謝。 – Water223

相關問題