← Все вопросы
В чём разница между COUNT(*) и COUNT(DISTINCT user_id)?
17
В таблице orders есть user_id. COUNT(*) даёт одно число, COUNT(DISTINCT user_id) — другое, меньше. Я думал они про одно и то же. Объясните разницу.
3 ответа
29
✓ Принятый ответ — помог автору
COUNT(*) считает СТРОКИ — сколько всего заказов. COUNT(DISTINCT user_id) считает СКОЛЬКО РАЗНЫХ пользователей встретилось. Если один человек сделал 5 заказов, в COUNT(*) он добавит 5, а в COUNT(DISTINCT user_id) — только 1. Поэтому второе число меньше или равно первому.
SELECT COUNT(*) AS orders,
COUNT(DISTINCT user_id) AS buyers
FROM orders;
Типичный смысл: «всего заказов» против «сколько уникальных покупателей».
9
Ещё нюанс: COUNT(user_id) (без DISTINCT) посчитает строки, где user_id IS NOT NULL. Так что есть целых три разных счётчика.
Лев Смирнов вот это часто забывают, спасибо · 20 месяцев назад
4
Звёздочка = строки, distinct = уникальные значения. Всё.
Ваш ответ
Войдите, чтобы ответить на вопрос.