Найти всех учеников с одинаковыми именем и фамилией

69. Найти учеников с одинаковыми именем и фамилией

Условие задачи:
Дана таблица Students, содержащая данные об учениках.

Необходимо найти учеников, у которых одновременно совпадают:

  • name;

  • surname.

Для каждой такой пары нужно вывести:

  • имя;

  • фамилию;

  • количество повторений.

В результат должны попасть только те пары name и surname, которые встречаются более одного раза.

Код:

-- Нужно найти учеников, у которых одинаковые name и surname,
-- и вывести имя, фамилию и количество повторений.

Пример:

Students:
('Иван', 'Иванов')
('Петр', 'Петров')
('Иван', 'Иванов')

Результат:

name | surname | repeat_count
-----+---------+-------------
Иван | Иванов  | 2

Спойлеры к решению

Подсказки
💡 Сгруппируй записи одновременно по name и surname.
💡 Для каждой группы посчитай количество строк через COUNT(*).
💡 Условие на количество записей после группировки задаётся через HAVING.
💡 Оставь только группы, где количество больше одного.

Решение
SELECT
    name,
    surname,
    COUNT(*) AS repeat_count
FROM Students
GROUP BY
    name,
    surname
HAVING COUNT(*) > 1
ORDER BY
    surname,
    name;

Группировка:

GROUP BY
    name,
    surname

объединяет учеников с одинаковыми именем и фамилией.

Затем:

COUNT(*)

подсчитывает количество записей в каждой группе, а:

HAVING COUNT(*) > 1

оставляет только повторяющиеся пары.

Например, если в таблице три раза встречается ('Анна', 'Смирнова'), результат будет:

name | surname  | repeat_count
-----+----------+-------------
Анна | Смирнова | 3