Поиск пользователей, у которых больше одной машины

14. Найти пользователей, у которых больше одного автомобиля

Условие задачи:
Даны таблицы пользователей и автомобилей.

Необходимо вывести имена пользователей, у которых больше одного автомобиля.

Код:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

INSERT INTO users (id, name) VALUES
(1, 'Ivan'),
(2, 'Oleg'),
(3, 'Anna'),
(4, 'Ivan'),
(5, 'Ted');

CREATE TABLE cars (
    id INT PRIMARY KEY,
    model VARCHAR(50) NOT NULL,
    user_id INT NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

INSERT INTO cars (id, model, user_id) VALUES
(4422, 'Opel 1', 1),
(4523, 'BMW 5', 2),
(4612, 'VW', 3),
(4853, 'BMW 6', 4);

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

Подсказки
💡 Соедини пользователей и автомобили по users.id = cars.user_id.
💡 Сгруппируй данные по пользователю.
💡 Количество автомобилей можно посчитать через COUNT().
💡 Для фильтрации после группировки используй HAVING.

Решение
SELECT u.name
FROM users u
JOIN cars c
    ON c.user_id = u.id
GROUP BY u.id, u.name
HAVING COUNT(c.id) > 1;

JOIN связывает каждого пользователя с его автомобилями.

После этого записи группируются по пользователю, а условие:

HAVING COUNT(c.id) > 1

оставляет только пользователей, у которых больше одного автомобиля.

Важно группировать по u.id, а не только по имени, поскольку разные пользователи могут иметь одинаковые имена.

Для приведённых данных запрос вернёт пустой результат, потому что у каждого пользователя сейчас только по одному автомобилю.