PostgreSQL 按名称计算用户

假设我们想知道有多少用户具有相同的名称。让我们创建表 users 如下:

create table users(
    id serial,
    name varchar(8) unique,
    count int
);

现在,我们刚刚发现了一个名为 Joe 的新用户,并希望将他考虑在内。为了实现这一点,我们需要确定是否存在具有其名称的现有行,如果是,则将其更新为递增计数; 另一方面,如果没有现有的行,我们应该创建它。

PostgreSQL 使用的语法如下: 插入…冲突…做更新中… 。在这种情况下:

insert into users(name, count)
    values('Joe', 1)
    on conflict (name) do update set count = users.count + 1;