Нужно найти дубликаты в таблице users (по email) — вывести email и количество дубликатов. Какой запрос корректен и эффективен?
SQLmediummiddle
Проверяет владение SQL: выборки, агрегации, JOIN-ы и оконные функции.
GROUP BYHAVINGduplicates
Варианты ответа
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
Как разобрать этот вопрос на собеседовании
Начни с разбора схемы: какие таблицы и ключи участвуют, где могут быть NULL и дубли строк. Затем реши, что важнее — JOIN, агрегация с GROUP BY/HAVING, оконная функция или подзапрос. На собеседовании ценят не только правильный результат, но и умение проговорить план запроса и крайние случаи (пустые группы, деление на ноль, фан-аут при JOIN).
На собеседовании по такому вопросу важно не только назвать ответ, но и кратко объяснить, почему он верный.
Тема вопроса — «SQL». Чтобы подготовиться к похожим задачам, отрабатывай их на практике: sql-тренажёр помогает довести навык до автоматизма, а раздел вопросов — увидеть формулировки, которые реально встречаются на интервью аналитика данных.
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
3000+ вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.