PostgreSQL: создайте ряд чисел, уникальных для справки - PullRequest
0 голосов
/ 22 мая 2018

Я привел пример: http://sqlfiddle.com/#!17/0f948/9

1-для многих - это то, что я строю, хотя многие-ко-многим были бы более реальной жизнью для этого примера.

ЧтоМне нужно выполнить: я должен быть в состоянии сгенерировать авторский порядок, изображающий последовательность целых чисел для столбца автора в таблице авторов, начиная с номера 1, чтобы каждое число было уникальным среди ссылок на книгу.Таким образом, для каждого автора задайте по определенной книге-справочнику числа от 1 до 2, до 3 и т. Д. Также должны быть сгенерированы числа для автора заказа, чтобы отразить порядок имени автора.').

Я попытался использовать последовательность, но она не сбрасывает порядковый номер для каждой книги, как мне хотелось бы, вместо этого номер продолжает увеличиваться (как я должен догадаться).Я также попытался сделать это с помощью row_number (), но не смог подготовить скрипт, который бы достиг того, чего я хочу.

Конечный результат после генерации authororder будет выглядеть примерно так:

author_id       fullname          mobileno            fk_book_id           authororder
100           John Green            30303                 1                     (1)
101           Maureen Johnson       4343                  1                     (3)
102           Lauren Myracle        76665                 1                     (2)
103           Greg Mortenson        6434                  2                     (2)
104           David Oliver Relin    72322                 2                     (1)
105           Marco Polo            54321                 3                     (3)
106           Angus MacGyver        27234                 3                     (1)
107           Timo TA               83451                 3                     (4)
108           Anonymous             55554                 3                     (2)

1 Ответ

0 голосов
/ 22 мая 2018

Вы, кажется, хотите:

row_number() over (partition by fk_book_id order by fullname) as authororder

Вы можете включить это в обновление как:

update author a
    set authororder = new_authororder
    from (select a.*, 
                 row_number() over (partition by fk_book_id order by fullname) as new_authororder
          from author a
         ) aa
    where a.authorid = aa.authorid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...