📜  SQL如何查找满足一定条件的重复记录?

📅  最后修改于: 2022-05-13 01:54:58.114000             🧑  作者: Mango

SQL如何查找满足一定条件的重复记录?

在本文中,我们将了解如何在 SQL 中查找满足某些条件的重复记录。使用 GROUP BY 和 HAVING 子句,我们可以显示表数据中的重复项。 SQL 中的 GROUP BY 语句用于借助某些函数将相同的数据分组。即,如果特定列在不同行中具有相同的值,则它将这些行排列在一个组中。

出于演示的目的,我们将在名为“ GeeksForGeeksDatabase ”的数据库中创建一个参与者表。

第 1 步:创建数据库

使用以下 SQL 语句创建一个名为GeeksForGeeksDatabase的数据库。

询问:

CREATE DATABASE GeeksForGeeksDatabase;

第 2 步:使用数据库

使用以下 SQL 语句将数据库上下文切换到GeeksForGeeksDatabase

询问:

USE GeeksForGeeksDatabase;

第三步:表定义

询问:

CREATE TABLE Geeks(
GeekID INTEGER PRIMARY KEY,
GeekName VARCHAR(255) NOT NULL,
GeekRank INTEGER NOT NULL,
GeekSchool VARCHAR(255) NOT NULL
);

询问:

INSERT INTO Geeks VALUES (101, 'Nix',2 ,'Code Valley School');
INSERT INTO Geeks VALUES (102, 'Rutz',4 ,'Blue Chip School');
INSERT INTO Geeks VALUES (103, 'Shrey',1 ,'GCOEA School');
INSERT INTO Geeks VALUES (104, 'Ankx',3 ,'Round Robin Play School');
INSERT INTO Geeks VALUES (105, 'Ridz',7 ,'Dream School');
INSERT INTO Geeks VALUES (106, 'Mayo',6 ,'Silver Shining School');
INSERT INTO Geeks VALUES (107, 'Bugs',5 ,'Twinkle Star Convent');

第 4 步:要查看创建的表的内容,我们使用以下查询:

询问:

SELECT * FROM Geeks;

输出:

上面的 geeks 表有正常记录,没有重复值。

第 5 步:让我们想象一下由于某些原因导致极客表中出现错误的情况,很少插入重复项。理想情况下,每一行都应该有一个唯一的GeekRank值,但现在在我们的表中插入了具有重复排名的重复极客。

询问:

INSERT INTO Geeks VALUES (108, 'Maria', 5 ,'Code Valley School');

在上面新更新的表中,我们可以看到有 2 条记录具有相同的极客等级 5 。 GeekID 107GeekID 108的排名相同,均为 5。现在我们需要使用 SQL Query 查找此重复项。

使用 GROUP BY 和 HAVING 子句:

从表中查找重复记录的一种方法是 GROUP BY 语句。 SQL 中的 GROUP BY 语句用于借助某些函数将相同的数据分组。即,如果特定列在不同行中具有相同的值,则它将这些行排列在一个组中。

查询以查找重复项:

查询以查找具有相同 GeekRank 的重复记录:

询问:

SELECT GeekRank, COUNT(GeekID) AS DuplicateRanks
FROM Geeks
GROUP BY GeekRank
HAVING COUNT(GeekRank)>1;

使用 GROUP BY 和 HAVING 子句,我们可以显示表数据中的重复项。 ' GROUP BY GeekRank ' 的意思是,将所有具有相同值的行仅该特定列即 GeekRank 放在一个组中。我们使用 ' HAVING COUNT(GeekRank)>1'来选择输出中具有超过 1 个极客等级的列。此处使用 SQL 的 COUNT()函数对重复行进行计数。在这里,我们将新列命名为“ DuplicateRanks ”,它计算重复排名。

输出:

解释:

我们可以看到,具有重复 GeekRank 的行被分组在同一个 GeekRank 下,它们对应的 COUNT 是重复行的 GeekRank 的计数。 GeekID 107 和 GeekID 108 具有相同的排名 5。因此在上面的输出中,我们可以看到 GeekRank 为 5(因为发现此第 5 排名重复)并且由于两个 GeekID 具有相同的 GeekRank 5,因此 DuplicateRank 即重复记录的计数是 2。一旦找到重复的行,您可以选择使用 DELETE 语句删除那些重复的行。