Вывести дубликаты кортежа name и age

75. Найти дублирующиеся комбинации имени и возраста

Условие задачи:
Дана таблица Person с полями:

  • name;

  • age.

Необходимо вывести комбинации name и age, которые встречаются в таблице более одного раза.

Для каждой такой комбинации также нужно вывести количество повторений.

Код:

Person
-----------------
name
age

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

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

Решение
SELECT
    name,
    age,
    COUNT(*) AS duplicate_count
FROM Person
GROUP BY
    name,
    age
HAVING COUNT(*) > 1;

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

GROUP BY
    name,
    age

объединяет строки с одинаковой парой значений name и age.

Затем:

HAVING COUNT(*) > 1

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

Например, для данных:

name | age
-----+----
Ivan | 20
Ivan | 20
Ivan | 30
Petr | 25
Petr | 25

результат будет:

name | age | duplicate_count
-----+-----+----------------
Ivan | 20  | 2
Petr | 25  | 2