SERIAL для каждого значения в другом столбце - PullRequest
0 голосов
/ 15 февраля 2020

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

например,

|  flav  | count|
| 'choc' |   1  |
| 'choc' |   2  |
|'banana'|   1  |
| 'choc' |   3  |
|'banana'|   2  |
| 'mint' |   1  |
|'banana'|   3  |
|   ...  |  ... |

Разумеется, отдельная вставка строки может быть достигнута с помощью 2 отдельных запросов: SELECT COUNT, а затем INSERT, но это не позволяет использовать эффективные пакетные вставки и I ' Я уверен, что есть лучший способ.

Я хочу иметь возможность просто сделать INSERT INTO orders (flav) VALUES ('choc'); и иметь схему для обработки столбца count, как если бы он обрабатывал столбец с автоинкрементом.

Я попытался определить DEFAULT выражение для столбца count в схеме, которое будет запросом SELECT COUNT, но без кубика: ERROR: cannot use subquery in DEFAULT expression.

1 Ответ

1 голос
/ 16 февраля 2020

Используйте оконную функцию row_number.

with flavor_list (flavor) as
 ( values 
           ( 'choc' )
         , ( 'choc' )
         , ('banana')
         , ( 'choc' )
         , ('banana')
         , ( 'mint' )
         , ('banana')
  ) 
select flavor, row_number() over(partition by flavor) 
 from flavor_list; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...