为 SQL 服务器中的列中的每个值计算冗余
Count redundant for each value in a column in SQL server
如果我在 SQL Server 2019 数据库中有以下 table 如下:
|id | name | count |
+-----+--------+--------+
| 1 | rose | 1 |
| 2 | peter | 1 |
| 3 | ann | 1 |
| 4 | rose | 2 |
| 5 | ann | 2 |
| 6 | ann | 3 |
| 7 | mike | 1 |
我想知道插入的名称是否已存在于“名称”列中以及出现了多少次,并在其旁边添加一个计数,如“计数”列中所示。比如第二次插入ann的时候我在旁边放了计数值2,第三次插入ann的时候我在旁边放了3。
如何使用 SQL 做到这一点?
谢谢
这是一种使用 insert ... select
语法的方法:
insert into mytable (name, cnt)
select v.name, (select count(*) + 1 from mytable t where t.name = v.name)
from (values (@name)) v(name)
要插入的值在导出的 table values()
中作为 @name
给出。然后我们使用子查询来统计在 table.
中已经存在了多少这样的名字
Select Name, Count(*)
From Table
Group By Name
我建议您在 查询 table 时计算此信息,而不是在 插入 行时:
select t.*,
row_number() over (partition by name order by id) as count
from t;
该值将始终正确 -- 即使更新数据或删除行。
如果我在 SQL Server 2019 数据库中有以下 table 如下:
|id | name | count |
+-----+--------+--------+
| 1 | rose | 1 |
| 2 | peter | 1 |
| 3 | ann | 1 |
| 4 | rose | 2 |
| 5 | ann | 2 |
| 6 | ann | 3 |
| 7 | mike | 1 |
我想知道插入的名称是否已存在于“名称”列中以及出现了多少次,并在其旁边添加一个计数,如“计数”列中所示。比如第二次插入ann的时候我在旁边放了计数值2,第三次插入ann的时候我在旁边放了3。
如何使用 SQL 做到这一点?
谢谢
这是一种使用 insert ... select
语法的方法:
insert into mytable (name, cnt)
select v.name, (select count(*) + 1 from mytable t where t.name = v.name)
from (values (@name)) v(name)
要插入的值在导出的 table values()
中作为 @name
给出。然后我们使用子查询来统计在 table.
Select Name, Count(*)
From Table
Group By Name
我建议您在 查询 table 时计算此信息,而不是在 插入 行时:
select t.*,
row_number() over (partition by name order by id) as count
from t;
该值将始终正确 -- 即使更新数据或删除行。