← Все вопросы

В чём разница между COUNT(*) и COUNT(DISTINCT user_id)?

Задан 20 месяцев назад885 просмотров3 ответа
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 = уникальные значения. Всё.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект