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

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

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

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

Код:

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

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

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

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

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

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

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

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

Условие:

HAVING COUNT(c.id) > 1

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

Для приведённых данных результат будет:

id | name | car_count
---------------------
1  | Ivan | 2

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