← Назад к вопросам
SQL запрос для поиска дубликатов
2.0 Middle🔥 161 комментариев
#Базы данных и SQL
Условие
Дана таблица employees с колонками: id, name, email, department. Напишите SQL запрос, который находит все дублирующиеся email адреса.
Ожидаемый результат
Список email адресов, которые встречаются более одного раза.
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Поиск дубликатов в базе данных — частая задача при тестировании, валидации данных и подготовке тест-кейсов. Правильно написанный SQL запрос позволяет быстро выявить проблемы с уникальностью данных.
Основной запрос
SELECT email, COUNT(*) as count
FROM employees
GROUP BY email
HAVING COUNT(*) > 1
ORDER BY count DESC;
Объяснение:
SELECT email, COUNT(*)— выбираем email и считаем количество повторенийFROM employees— из таблицы employeesGROUP BY email— группируем по email адресуHAVING COUNT(*) > 1— фильтруем группы с дубликатамиORDER BY count DESC— сортируем по количеству повторений
Расширенный запрос
SELECT e.*
FROM employees e
WHERE e.email IN (
SELECT email
FROM employees
GROUP BY email
HAVING COUNT(*) > 1
)
ORDER BY e.email;
Показывает все записи с дублирующимися email адресами.
С оконной функцией
SELECT *,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) as rn
FROM employees
WHERE email IN (
SELECT email
FROM employees
GROUP BY email
HAVING COUNT(*) > 1
)
ORDER BY email, id;
Нумерует дубликаты для удаления. Легко удалить: DELETE FROM employees WHERE rn > 1
Best Practices:
- Используй
HAVING COUNT(*) > 1для фильтрации - Включай ID в результаты
- Сортируй для удобства анализа
- Создавай индексы на часто проверяемые колонки
- Помни, что NULL != NULL в SQL
Эти запросы работают в PostgreSQL, MySQL, SQL Server и других СУБД.