Вы соединяете таблицы пользователей и заказов по user_id, где у одного пользователя может быть много заказов (связь «один ко многим»). Как посчитать число пользователей, которые сделали хотя бы один заказ, и не получить дубли?

ACOUNT(*) после соединения таблиц пользователей и заказов по user_id
BCOUNT(DISTINCT user_id) после соединения таблиц пользователей и заказов по user_id
CCOUNT(user_id) после соединения с фильтром WHERE order_id IS NOT NULL
DCOUNT(DISTINCT order_id) после соединения с группировкой GROUP BY user_id
Правильный ответ. В соединении «один ко многим» COUNT(*) считает строки заказов, поэтому для пользователей нужен COUNT(DISTINCT user_id).

Разбор

После соединения каждый заказ создаёт отдельную строку, поэтому пользователи с несколькими заказами появляются в результате несколько раз — это и есть дублирование. Чтобы получить число уникальных пользователей, нужно считать уникальные user_id, например через COUNT(DISTINCT user_id). Тот же принцип полезен и для других метрик, где единица анализа — пользователь, а не строка таблицы.

Проверь себя · 1/3разбор после ответа
Вы соединяете таблицы пользователей и заказов по user_id, где у одного пользователя может быть много заказов (связь «один ко многим»). Как посчитать число пользователей, которые сделали хотя бы один заказ, и не получить дубли?
Открыть Карьерник в Telegram

Ещё вопросы по теме «JOIN и кардинальность»