更改列中的重复值
Change duplicate value in a column
能否请您告诉我 SQL query
可以使用什么来更改 table 一栏中的重复项?
我发现了这些重复项:
SELECT Model, count(*) FROM Devices GROUP BY model HAVING count(*) > 1;
我一直在寻找关于如何更改其中一个重复值的信息,但不幸的是我没有找到适合自己的特定选项,而且更多的信息都是通过删除重复值行来填充的,我不需要。 SQL 一点都不强。我寻求帮助。非常感谢。
命令后:
SELECT Model, count (*) FROM Devices GROUP BY model HAVING count (*)> 1;
我得到结果:
- 1895 行 = NULL;
- 3383 行具有重复值;
- 所有这些值都是 1243。
应用命令后:
update Devices set
Model = '-'
where id not in
(select
min(Devices .id)
from Devices
group by Devices.Model)
我更改了 4035 行。
如果你数一数,结果是 (3383 + 1895) = 5278 - 1243 = 4035
看起来一切都很合适,结果很合适,很有效。
使用exists
如下:
update d
set Model = '-'
from Devices d
where exists (select 1 from device dd where dd.model = d.model and dd.id > d.id)
您可以轻松地使用 Window 函数,例如 ROW_NUMBER()
和分区选项,以便按 Model
列分组以消除重复项,然后选择第一行(rn=1
) 从子查询返回如
WITH d AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Model) AS rn
FROM Devices
)
SELECT ID, Model -- , and the other columns
FROM d
WHERE rn = 1
能否请您告诉我 SQL query
可以使用什么来更改 table 一栏中的重复项?
我发现了这些重复项:
SELECT Model, count(*) FROM Devices GROUP BY model HAVING count(*) > 1;
我一直在寻找关于如何更改其中一个重复值的信息,但不幸的是我没有找到适合自己的特定选项,而且更多的信息都是通过删除重复值行来填充的,我不需要。 SQL 一点都不强。我寻求帮助。非常感谢。
命令后:
SELECT Model, count (*) FROM Devices GROUP BY model HAVING count (*)> 1;
我得到结果:
- 1895 行 = NULL;
- 3383 行具有重复值;
- 所有这些值都是 1243。
应用命令后:
update Devices set
Model = '-'
where id not in
(select
min(Devices .id)
from Devices
group by Devices.Model)
我更改了 4035 行。 如果你数一数,结果是 (3383 + 1895) = 5278 - 1243 = 4035 看起来一切都很合适,结果很合适,很有效。
使用exists
如下:
update d
set Model = '-'
from Devices d
where exists (select 1 from device dd where dd.model = d.model and dd.id > d.id)
您可以轻松地使用 Window 函数,例如 ROW_NUMBER()
和分区选项,以便按 Model
列分组以消除重复项,然后选择第一行(rn=1
) 从子查询返回如
WITH d AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Model) AS rn
FROM Devices
)
SELECT ID, Model -- , and the other columns
FROM d
WHERE rn = 1