Postgres создать идентификатор для групп - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь решить проблему, которая вначале выглядела довольно легко, но я не мог найти какое-либо (простое) решение

У меня есть таблица с несколькими столбцами, и я хочу создать идентификатор поверхгруппу, определенную некоторыми из столбцов

, лучше показать на примере трех столбцов, и я хочу иметь идентификатор для групп, определенных col1 и col2, который выглядит как задание для оконной функции, но почему-то мне не удалосьсделай это

col1 col2 col3 ID
val1 valA x    1
val1 valA y    1
val1 valB y    2
val2 valC z    3
val3 valA v    4
val3 valA r    4

1 Ответ

0 голосов
/ 28 ноября 2018

На самом деле это довольно просто, используя аналитическую функцию Dense_Rank:

SQL Fiddle

Настройка схемы PostgreSQL 9.6 :

CREATE TABLE Table1
    ("col1" varchar(4), "col2" varchar(4), "col3" varchar(1))
;

INSERT INTO Table1
    ("col1", "col2", "col3")
VALUES
    ('val1', 'valA', 'x'),
    ('val1', 'valA', 'y'),
    ('val1', 'valB', 'y'),
    ('val2', 'valC', 'z'),
    ('val3', 'valA', 'v'),
    ('val3', 'valA', 'r')
;

Запрос 1 :

select col1, col2, col3
     , dense_rank() over (order by col1, col2) id
  from table1

Результаты :

| col1 | col2 | col3 | id |
|------|------|------|----|
| val1 | valA |    x |  1 |
| val1 | valA |    y |  1 |
| val1 | valB |    y |  2 |
| val2 | valC |    z |  3 |
| val3 | valA |    v |  4 |
| val3 | valA |    r |  4 |
...