← Все вопросы

COUNT(*) или COUNT(column) — в чём разница при подсчёте строк?

Задан 10 месяцев назад871 просмотров3 ответа
15

Хочу посчитать количество заказов. Видел и COUNT(*), и COUNT(user_id). Это одно и то же или нет? И что с NULL?

3 ответа

24
✓ Принятый ответ — помог автору

Не одно и то же из-за NULL:

  • COUNT(*) — считает ВСЕ строки, включая те, где есть NULL.
  • COUNT(column) — считает только строки, где column НЕ NULL.
  • COUNT(DISTINCT column) — количество уникальных непустых значений.
SELECT
  COUNT(*)              AS всего_строк,
  COUNT(phone)          AS с_телефоном,
  COUNT(DISTINCT city)  AS уникальных_городов
FROM users;

Если просто «сколько строк» — бери COUNT(*), он самый быстрый и не зависит от NULL.

7

COUNT(*) для строк, COUNT(col) пропускает NULL.

-3

Всегда пиши COUNT(1), это быстрее чем COUNT(*).

Конструктивный Петух миф, в современных СУБД COUNT(*) и COUNT(1) одинаковы по плану · 10 месяцев назад

Ваш ответ

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