Подсчёт количества заказов, оформленных каждым клиентом

LEFT JOIN сохранит клиентов без заказов, а COUNT(o.ID) даст для них ноль. Группируйте по ID и имени клиента, чтобы не объединить разных людей с одинаковыми именами.

Короткий ответ

Что ответить на собеседовании

LEFT JOIN сохранит клиентов без заказов, а COUNT(o.ID) даст для них ноль. Группируйте по ID и имени клиента, чтобы не объединить разных людей с одинаковыми именами.

Подробный разбор

Ответ с пояснениями

Условие

Имеются две таблицы: Customers с колонками ID и Name, а также Orders с колонками ID и Customer_ID. Требуется написать SQL‑запрос, который для каждого клиента покажет его имя (Name) и количество записей в Orders, связанных с данным клиентом.

Ответ

LEFT JOIN сохранит клиентов без заказов, а COUNT(o.ID) даст для них ноль. Группируйте по ID и имени клиента, чтобы не объединить разных людей с одинаковыми именами.

Запрос:

SELECT c.Name, COUNT(o.ID) AS order_count
FROM Customers c
LEFT JOIN Orders o ON o.Customer_ID = c.ID
GROUP BY c.ID, c.Name;

COUNT(o.ID) не считает NULL, возникающий при отсутствии заказа. COUNT(*) в такой группе дал бы 1, что неверно. Предполагается, что ID заказа не допускает NULL, как обычный первичный ключ. INNER JOIN исключил бы клиентов без заказов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее