Нужно найти дубликаты в таблице users (по email) — вывести email и количество дубликатов. Какой запрос корректен и эффективен?
SQLmediummiddle
Варианты ответа
SELECT email, COUNT(*) AS cnt FROM users GROUP BY email HAVING COUNT(*) > 1 — GROUP BY + HAVING фильтрует группы после агрегации, стандарт и эффективно при индексе по email
SELECT email, COUNT(DISTINCT id) AS cnt FROM users GROUP BY email WHERE COUNT(id) > 1 — COUNT DISTINCT и WHERE с функцией агрегации исключают false positives для NULL значений
SELECT email FROM users WHERE email IN (SELECT email FROM users GROUP BY email) — подзапрос через IN явно находит повторяющиеся email и возвращает их список без дополнительных полей
SELECT DISTINCT email FROM users u1 JOIN users u2 ON u1.email = u2.email AND u1.id <> u2.id — self-join даёт все пары дубликатов, DISTINCT убирает повторы строк, быстрее GROUP BY
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
2475 вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.