Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列的唯一组合的编号_Sql_Postgresql - Fatal编程技术网

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