Как найти повторяющиеся записи, соответствующие определенным условиям в SQL?

Опубликовано: 1 Сентября, 2022

В этой статье мы поймем, как найти повторяющиеся записи, соответствующие определенным условиям в SQL. Используя предложения GROUP BY и HAVING, мы можем показать дубликаты в данных таблицы. Оператор GROUP BY в SQL используется для объединения идентичных данных в группы с помощью некоторых функций. т.е. если конкретный столбец имеет одинаковые значения в разных строках, то он упорядочит эти строки в группу.

Для демонстрации мы создадим таблицу участников в базе данных под названием « GeeksForGeeksDatabase ».

Шаг 1: Создание базы данных

Используйте приведенный ниже оператор SQL для создания базы данных с именем GeeksForGeeksDatabase .

Запрос:

CREATE DATABASE GeeksForGeeksDatabase;

Шаг 2: Использование базы данных

Используйте приведенный ниже оператор SQL, чтобы переключить контекст базы данных на GeeksForGeeksDatabase .

Запрос:

USE GeeksForGeeksDatabase;

Шаг 3: Определение таблицы

Запрос:

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");

В приведенной выше недавно обновленной таблице мы могли видеть две записи с одинаковым гиковским рейтингом 5 . GeekID 107 и GeekID 108 имеют одинаковый ранг 5. Теперь нам нужно найти это дублирование с помощью SQL Query.

Используя предложение GROUP BY и HAVING:

Одним из способов поиска повторяющихся записей в таблице является оператор GROUP BY. Оператор GROUP BY в SQL используется для объединения идентичных данных в группы с помощью некоторых функций. т.е. если конкретный столбец имеет одинаковые значения в разных строках, то он упорядочит эти строки в группу.

Запрос для поиска дубликатов:

Запрос для поиска повторяющихся записей с одинаковым 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.