2013-11-06 6 views
1

Я хотел бы добавить уникальный номер к каждой уникальной комбинации значений в таблице.Нумерация уникальных комбинаций столбцов

Образец данных:

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 (группа Identificator)

Пример вывода (например, строки с идентификатором 1 , 2 3 имеют ту же комбинацию столбцов a, b, c, d, и в результате эти строки должны иметь одинаковый идентификатор группы):

id;gid 
1;2 
2;2 
3;2 
4;3 
5;3 
6;3 
7;1 
8;1 
9;1 

я выяснил следующее решение, но я думаю, что должно быть лучше (и быстрее) способ:

select 
    id, 
    gid 
from 
    tmp 
    join (
     select 
     a, b, c, d, row_number() over() as gid 
     from 
     tmp 
     group by 
     a, b, c, d) gids using (a, b, c, d) 

SQLFiddle

ответ

Смежные вопросы