После добавления условия в WHERE из отчёта пропали клиенты без заказов
Нужен отчёт: все клиенты и количество их оплаченных заказов, включая клиентов без заказов вообще.
Запрос выглядит так:
SELECT c.id, c.name, COUNT(o.id) AS paid_orders
FROM clients c
LEFT JOIN orders o ON o.client_id = c.id
WHERE o.status = 'paid'
GROUP BY c.id, c.name;
В результате клиенты без заказов исчезли. Почему?
- COUNT(o.id) отбрасывает строки, где заказов нет, поэтому такие клиенты не попадают в группировку
- Нужно добавить в GROUP BY поле o.status: без группировки по статусу строки клиентов без заказов схлопываются и теряются при агрегации
- Для клиентов без заказов поля из orders равны NULL, и условие в WHERE их отсекает — соединение фактически стало внутренним
- LEFT JOIN нужно заменить на RIGHT JOIN: при левом соединении сохраняются строки правой таблицы
