首页 > 解决方案 > 如何使用 row_number() 将行号分配给 postgresql 中的重复值

问题描述

我在数据中有一些行,其中 agentid 和客户 ID 被重复。像这样 表格1

我想为每个重复值分配一个行号,以便结果如下表所示: 表 2:

代理ID 客户ID 行号
26 1234 1
26 1234 2
26 1234 3
26 1234 4
26 1454 1
26 1256 1
26 1256 2
30 1256 1

我是 PostgreSQL 新手,所以我尝试了这个:

select agentid, customerid, row_number() OVER () from aa_dev.calls group by agentid, customerid having count(customerid) > 1;

上面的这个查询选择了所有重复的对并为它们中的每一个分配了行 表3

但我想创建我上面在表 2 中提到的东西。请指导我。

标签: postgresql

解决方案


你要:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY agentid, customerid ORDER BY random()) rn,
              COUNT(*) OVER (PARTITION BY agentid, customerid) cnt
    FROM aa_dev.calls
)

SELECT agentid, customerid, rn      
FROM cte
WHERE cnt > 1;

推荐阅读