gpt4 book ai didi

sql - 如何在 Postgres 中实现 Oracle count(distinct) over partition

转载 作者:行者123 更新时间:2023-11-29 12:25:15 24 4
gpt4 key购买 nike

这是我在 select 语句中的 sql 示例。从 oracle 转换到 postgres,需要一种简单的方法来在 postgres 中重新实现 oracle count distinct over partition。

, 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 键和不同列的 row_number()。然后,将值为“1”的次数相加即可。这需要一个子查询,因为您不能嵌套窗口函数。

关于sql - 如何在 Postgres 中实现 Oracle count(distinct) over partition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com