Машины розового цвета и количество по цветам

31. Получить розовые машины и посчитать машины по цветам

Условие задачи:
Даны таблицы colors и cars.

Необходимо:

  1. вывести все машины розового цвета;

  2. посчитать количество машин для каждого цвета.

Код:

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.