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 исключил бы клиентов без заказов.