Перейти к содержимому

Как вывести дубликаты в sql

  • автор:

Поиск дубликатов MySQL

Сборник запросов для поиска, изменения и удаления дублей в таблице MySQL по одному и нескольким полям. В примерах все запросы будут применятся к следующий таблице:

В примерах все запросы будут применятся к следующий таблице

Поиск дубликатов

Подсчет дублей

Запрос подсчитает количество всех записей с одинаковыми значениями в поле `col1` .

SELECT `col1`, COUNT(`col1`) AS `count` FROM `table` GROUP BY `col1` HAVING `count` > 1

Подсчет дублей

Подсчет дубликатов по нескольким полям:
SELECT `col1`, `col2`, COUNT(*) AS `count` FROM `table` GROUP BY `col1`,`col2` HAVING `count` > 1

Запрос для подсчета дубликатов записей по нескольким полям

Все записи с одинаковыми значениями

Запрос найдет все записи с одинаковыми значениями в `col1` .

SELECT * FROM `table` WHERE `col1` IN (SELECT `col1` FROM `table` GROUP BY `col1` HAVING COUNT(*) > 1) ORDER BY `col1`

Все записи с одинаковыми значениями

Для одинаковых значений в `col1` и `col2` :

SELECT * FROM `table` WHERE `col1` IN (SELECT `col1` FROM `table` GROUP BY `col1` HAVING COUNT(*) > 1) AND `col2` IN (SELECT `col2` FROM `table` GROUP BY `col2` HAVING COUNT(*) > 1) ORDER BY `col1`

Получить только дубликаты

Запрос получит только дубликаты, в результат не попадают записи с самым ранним `id` .

SELECT `table`.* FROM `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1` FROM `table` GROUP BY `col1`) AS `tmp` ON `table`.`id` = `tmp`.`id` WHERE `tmp`.`id` IS NULL

Получить только дубликаты

Для нескольких полей:
SELECT `table`.* FROM `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1`, `col2` FROM `table` GROUP BY `col1`, `col2`) AS `tmp` ON `a`.`id` = `tmp`.`id` WHERE `tmp`.`id` IS NULL

Уникализация записей

Запрос сделает уникальные названия только у дублей, дописав `id` в конец `col1` .

UPDATE `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1` FROM `table` GROUP BY `col1`) AS `tmp` ON `table`.`id` = `tmp`.`id` SET `table`.`col1` = CONCAT(`table`.`col1`, '-', `table`.`id`) WHERE `tmp`.`id` IS NULL

Уникализация записей

По нескольким полям:
UPDATE `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1`, `col2` FROM `table` GROUP BY `col1`, `col2`) AS `tmp` ON `table`.`id` = `tmp`.`id` SET `table`.`col1` = CONCAT(`table`.`col1`, '-', `table`.`id`) WHERE `tmp`.`id` IS NULL

Удаление дубликатов

Удаление дублирующихся записей, останутся только уникальные.

DELETE `table` FROM `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1` FROM `table` GROUP BY `col1`) AS `tmp` ON `table`.`id` = `tmp`.`id` WHERE `tmp`.`id` IS NULL
По нескольким полям:
DELETE `table` FROM `table` LEFT OUTER JOIN (SELECT MIN(`id`) AS `id`, `col1`, `col2` FROM `table` GROUP BY `col1`, `col2`) AS `tmp` ON `table`.`id` = `tmp`.`id` WHERE `tmp`.`id` IS NULL

Как в sql посчитать количество повторяющихся значений

Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY .

Предположим, у нас есть таблица «orders» с колонками «customer_name» и «order_date» , и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:

Этот запрос выберет все уникальные значения из колонки «customer_name» в таблице «orders» и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами «customer_name» и «order_count» , в которой каждая строка будет показывать клиента и количество его заказов.

Поиск дубликата записей в таблице SQL

введите сюда описание изображения

Есть таблица с несколькими полями. Есть список id, к которым нужно найти дубликаты по 3 полям (поле 1, поле 2, поле 3). Например, у меня есть id 1 — соответственно запрос должен вернуть id 5 и id 10 (совпадают первые 3 поля);для id 3 вернет id 7 (также совпадают 3 поля), для остальных id ничего не вернет (нет совпадений по 3 полям). Не могу составить запрос, который вывод бы только дубликаты (или исходная строка + дубликат) на основе id, прошу помочь. Все дубликаты в таблице выводить умею, количество считаю тоже, а вот дубликаты к конкретным записям не могу найти. Естественно, «боевая» таблица в разы больше 🙂 Нужно понять принцип.

Отслеживать

51.6k 201 201 золотой знак 63 63 серебряных знака 245 245 бронзовых знаков

Исключение дубликатов

Иногда в таблицах встречаются дубликаты, как например имена сотрудников. Для исключения повторяющихся строк, нужно после ключевого слова SELECT написать DISTINCT .

Чтобы получить список уникальных имен сотрудников, необходимо выполнить запрос:

SELECT DISTINCT first_name FROM employee 
first_name
Анна
Лука
Ольга
.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *