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