31. Получить розовые машины и посчитать машины по цветам
Условие задачи:
Даны таблицы colors и cars.
Необходимо:
вывести все машины розового цвета;
посчитать количество машин для каждого цвета.
Код:
CREATE TABLE colors (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
UNIQUE(name)
);
CREATE TABLE cars (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
color_id INT,
FOREIGN KEY (color_id) REFERENCES colors(id)
);
Спойлеры к решению
Подсказки
💡 Для получения машин определённого цвета соедини
💡 Для фильтрации используй
💡 Для подсчёта машин используй
💡 Если нужно показать даже цвета без машин, используй
cars и colors через JOIN.💡 Для фильтрации используй
WHERE colors.name = 'pink'.💡 Для подсчёта машин используй
COUNT() и GROUP BY.💡 Если нужно показать даже цвета без машин, используй
LEFT JOIN.Решение
Машины розового цвета:
SELECT car.name AS car_name
FROM cars car
JOIN colors color
ON car.color_id = color.id
WHERE color.name = 'pink';
Количество машин для каждого цвета:
SELECT
color.name AS color,
COUNT(car.id) AS car_count
FROM colors color
LEFT JOIN cars car
ON car.color_id = color.id
GROUP BY color.id, color.name
ORDER BY color.name;
LEFT JOIN позволяет сохранить в результате цвета, для которых пока нет ни одной машины.
Важно использовать:
COUNT(car.id)
а не COUNT(*), потому что для цвета без машин LEFT JOIN создаст строку с NULL в полях таблицы cars. В этом случае COUNT(car.id) корректно вернёт 0.