postgresql—为sql列中的唯一值生成计数器id的正确方法?

6mzjoqzu  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(336)
pk_id unq_id content
1     1      foo
2     2      bar
3     1      foo
4     1      foo
5     3      baz
6     2      bar
7     4      qux

我正在用已知的内容填充一个表,这些内容可以随机重复多次。我想自动生成unq\u id列,它统计content列中唯一值的第n次出现。
我正在考虑一些外键约束,但不确定如何构造这种约束。在网上搜索了很久没有结果,我只能在这里问。
有人能给我点启示吗?任何帮助都将不胜感激。

kyxcudwk

kyxcudwk1#

在查询表时,使用 row_number() :

select pk_id, content,
       row_number() over (partition by content order by pk_id) as unq_id
from t;

你可以把这个逻辑放在一个视图中。
实际上,在表中存储值需要一些工作。如果不预先计算值,则需要使用触发器。
或者,如果数据没有更改,则可以加载到暂存表中,并使用上面的查询创建最终表。

相关问题