JuniorКодЧастоЕщё не отвечали
Напишите запрос для поиска повторяющихся email
Верните каждый email, встречающийся в таблице более одного раза.
-- Person(id, email)
-- напишите ваш запрос здесь
Напишите запрос.
Сгруппируйте по столбцу и оставьте группы размером > 1: SELECT email FROM Person GROUP BY email HAVING COUNT(*) > 1. Фильтровать агрегат нужно через HAVING, а не WHERE — WHERE вычисляется до группировки строк, поэтому не видит COUNT(*).
- ✗Ставить
COUNT(*)вWHEREвместоHAVING - ✗Думать, что
DISTINCTнаходит дубликаты, а не убирает их - ✗Ожидать, что наивный self-join выделит только дубликаты
- →Почему
WHEREне может фильтровать по агрегату вродеCOUNT(*)? - →Как заодно вернуть, сколько раз встречается каждый повторяющийся email?
Оглавление
Задача
Верните каждый email из Person, встречающийся более одного раза.
Решение
SELECT email
FROM Person
GROUP BY email
HAVING COUNT(*) > 1;
Ключевые моменты
GROUP BYсобирает строки по email;COUNT(*)считает размер каждой группы.HAVINGфильтрует уже агрегированные группы;WHEREотработал бы до группировки.- Чтобы увидеть число повторов, добавьте
COUNT(*)в список выборки.
Оглавление