将组ID分配给特定列中具有相同值的行

时间:2018-07-05 14:29:54

标签: sql postgresql

我有一张这样的桌子:

merchant | id    | Address
A        | 1     | aaa   
B        | 2     | bbb   
B        | 3     | bbb   
C        | 4     | ccc   
C        | 5     | ccc   
C        | 6     | ccc

由于同一商人可以具有不同的ID,所以我想按“商人”和“地址”对商人进行分组,添加具有组ID的列,以便“商人”中具有相同组ID的条目实际上是一个商人。所需的结果是这样的:

merchant | id    | Address |grp_id
A        | 1     | aaa     |a1
B        | 2     | bbb     |a2
B        | 3     | bbb     |a2
C        | 4     | ccc     |a3
C        | 5     | ccc     |a3
C        | 6     | ccc     |a3

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以应用Dense_Rank()窗口函数来实现此目的:

    SELECT "Id", "Merchant", "Address",
    concat('A', cast(DENSE_RANK() OVER ( order by "Merchant" ) As Varchar(10))) as Grp_id
    FROM "Table"
    ORDER BY "Id";

enter image description here