Sql 列的唯一组合的编号
我想为表中每个唯一的值组合添加唯一的数字 样本数据:Sql 列的唯一组合的编号,sql,postgresql,Sql,Postgresql,我想为表中每个唯一的值组合添加唯一的数字 样本数据: create table tmp ( id int primary key, a varchar, b varchar, c varchar, d varchar, f int ); insert into tmp values (1,'a','b','e','h',1); insert into tmp values (2,'a','b','e','h',2); insert into tmp valu
create table tmp (
id int primary key,
a varchar,
b varchar,
c varchar,
d varchar,
f int
);
insert into tmp values (1,'a','b','e','h',1);
insert into tmp values (2,'a','b','e','h',2);
insert into tmp values (3,'a','b','e','h',3);
insert into tmp values (4,'b','c','f','i',2);
insert into tmp values (5,'b','c','f','i',1);
insert into tmp values (6,'b','c','f','i',2);
insert into tmp values (7,'c','d','g','j',3);
insert into tmp values (8,'c','d','g','j',1);
insert into tmp values (9,'c','d','g','j',2);
现在,我需要为列a、b、c、d
和返回列id
和gid
的每个唯一组合分配编号(组标识符)
示例输出(例如,id为1,23的行具有相同的列组合a、b、c、d
,因此这些行应具有相同的组标识符):
我已经想出了以下解决方案,但我认为应该有更好(更快)的方法:
您可以使用以下功能:
select
id, dense_rank() over(order by a,b,c,d) as gid
from tmp
您可以使用以下功能:
select
id, dense_rank() over(order by a,b,c,d) as gid
from tmp
select
id, dense_rank() over(order by a,b,c,d) as gid
from tmp