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, а не только по имени, поскольку разные пользователи могут иметь одинаковые имена.
Для приведённых данных запрос вернёт пустой результат, потому что у каждого пользователя сейчас только по одному автомобилю.