Как найти повторяющиеся записи, соответствующие определенным условиям в SQL?
В этой статье мы поймем, как найти повторяющиеся записи, соответствующие определенным условиям в 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.