Нужно посчитать число пользователей, которые сделали хотя бы 1 заказ (таблицы users(user_id) и orders(user_id, order_id)). Какой запрос посчитает правильно?

ASELECT COUNT(DISTINCT u.user_id) FROM users u INNER JOIN orders o ON u.user_id = o.user_id;
BSELECT COUNT(*) FROM users u INNER JOIN orders o ON u.user_id = o.user_id;
CSELECT COUNT(u.user_id) FROM users u LEFT JOIN orders o ON u.user_id = o.user_id;
DSELECT COUNT(*) FROM orders;
Правильный ответ. В связке one-to-many COUNT(*) после JOIN считает строки (заказы), поэтому для пользователей нужен COUNT(DISTINCT ...).

Разбор

Если у одного пользователя несколько заказов, INNER JOIN создаст несколько строк на одного пользователя. Поэтому COUNT(*) посчитает заказы, а не пользователей. Чтобы получить число уникальных пользователей с заказами, используйте COUNT(DISTINCT u.user_id) после соединения.

Проверь себя · 1/3разбор после ответа
В отчёте нужно вывести всех пользователей и количество их заказов, включая тех, у кого заказов нет. Какой тип соединения между users и orders по user_id нужен?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»