首页 > 解决方案 > sql根据两列中的某个值添加具有唯一ID的列

问题描述

我在为我的数据库表创建“id”列时遇到问题。id 列将唯一的 id 添加到 value1 和 value2 中具有相同值的行,包括反向。

我想实现以下目标:

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

标签: sql

解决方案


您可以使用;

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()and least(),所以这可以更简单地写成:

select t.*,
       dense_rank() over (order by least(value1, value2), greatest(value1, value2)
                         ) as group_id                                   
from t;

推荐阅读