2. Написать SQL-запрос, чтобы вывести пользователей, у которых более одного автомобиля? #
CREATE TABLE USER (
id INT,
name VARCHAR(50)
);
INSERT INTO USER (id, name) VALUES
(1, 'Ivan'),
(2, 'Oleg'),
(3, 'Anna'),
(4, 'Ivan'),
(5, 'Ted');
CREATE TABLE CAR (
id INT,
model VARCHAR(50)
);
INSERT INTO CAR (id, model) VALUES
(4422, 'Opel 1'),
(4523, 'BMV 5'),
(4612, 'VW'),
(4853, 'BMV 6');
Спойлеры к решению
Подсказки
- Нам нужно посчитать количество машин у каждого пользователя.
- Используем
GROUP BY user_id
для группировки по пользователям. - Применяем
HAVING COUNT(*) > 1
, чтобы оставить только тех, у кого больше одной машины. - Убедимся, что таблица
CAR
связана сUSER
, добавивuser_id
вCAR
.
Решение
Добавляем внешний ключ, если его нет:
ALTER TABLE CAR ADD COLUMN user_id INT;
ALTER TABLE CAR ADD FOREIGN KEY (user_id) REFERENCES USER(id);
Запрос для поиска пользователей с более чем одной машиной:
SELECT u.id, u.name, COUNT(c.id) AS car_count
FROM USER u
JOIN CAR c ON u.id = c.user_id
GROUP BY u.id, u.name
HAVING COUNT(c.id) > 1;
🔹 Как это работает?
JOIN
объединяет таблицыUSER
иCAR
поuser_id
.GROUP BY u.id, u.name
группирует данные по пользователям.COUNT(c.id)
считает количество машин у каждого пользователя.HAVING COUNT(c.id) > 1
оставляет только пользователей с двумя и более машинами.
Выход:
id | name | car_count
----------------------
1 | Ivan | 2
Значит, у пользователя “Ivan” больше одной машины. 🚗🚗