Вступить в клуб →
средняявопросSQL и проверка данных

После добавления условия в 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: при левом соединении сохраняются строки правой таблицы

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела