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, а не только по имени, поскольку разные пользователи могут иметь одинаковые имена.