我有一个表,代表城市之间的贸易往来,我想添加一个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
我可以具有相同的起源/目的地,但是我也可以具有起源/目的地=目的地/起源,并且我希望所有这些组均得到标识。
答案 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开头,如您的示例。