将ID添加到两列中的重复项

时间:2019-02-05 16:21:01

标签: sql postgresql duplicates grouping

我有一个表,代表城市之间的贸易往来,我想添加一个ID,该ID表示相同起源/目的地和目的地/起源的组。

例如:

| origin | destination
|--------|------------
| 8      | 2
| 2      | 8
| 8      | 2
| 8      | 5
| 8      | 5
| 9      | 1
| 1      | 9

将成为:

| id | origin | destination
|----|--------|------------
| 0  | 8      | 2
| 0  | 2      | 8
| 0  | 8      | 2
| 1  | 8      | 5
| 1  | 8      | 5
| 2  | 9      | 1
| 2  | 1      | 9

我可以具有相同的起源/目的地,但是我也可以具有起源/目的地=目的地/起源,并且我希望所有这些组均得到标识。

1 个答案:

答案 0 :(得分:2)

一种方法:使用窗口功能dense_rank()GREATEST / LEAST

SELECT dense_rank() OVER (ORDER BY GREATEST(origin, destination)
                                 , LEAST   (origin, destination)) - 1 AS id
     , origin, destination
FROM   trade;

db <>提琴here

- 1以0开头,如您的示例。