[英]How to implement Oracle count(distinct) over partition in Postgres
这是我在select语句中的sql示例。 从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
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
键和不同的列计算partition by
上的row_number()
。 然后,只需将值等于“ 1”的次数相加即可。 这需要一个子查询,因为您不能嵌套窗口函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.