我无法为数据库表创建“ id”列。 id列为value1和value2中具有相同值(包括反向)的行添加唯一ID。
我想实现以下目标:
value1, value2, id
1 2 1
1 2 1
2 1 1
3 4 2
4 3 2
5 6 3
6 7 4
我试图通过以下查询在我的select语句中创建id列:(它仅合并具有相等的value1和value2的行):
SUM(CASE
WHEN value1= value1 and value2= value1 THEN 1
ELSE NULL END) OVER (PARTITION BY value1,value2) AS id
答案 0 :(得分:0)
您可以使用;
select t.*,
dense_rank() over (order by (case when value1 < value2 then value1 else value2 end),
(case when value1 < value2 then value2 else value1 end)
) as group_id
from t;
我应该注意,大多数数据库都支持greatest()
和least()
,因此可以这样写:
select t.*,
dense_rank() over (order by least(value1, value2), greatest(value1, value2)
) as group_id
from t;