2017-04-19 29 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

相关问题