SERIAL 用于另一列中的每个值

SERIAL for each value in another column

我想让一列成为一个自动递增的序列,它在其他列的值内累加

例如

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

单独的行插入当然可以通过 2 个单独的查询来实现,一个 SELECT COUNT 后跟一个 INSERT,但这不允许高效的批量插入,我相信有更好的方法。

我希望能够只执行 INSERT INTO orders (flav) VALUES ('choc'); 并让架构处理 count 列,就像它处理自动递增列一样。

我试图为模式中的 count 列定义一个 DEFAULT 表达式,这将是一个 SELECT COUNT 查询,但没有骰子:ERROR: cannot use subquery in DEFAULT expression.

使用window函数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;