Как посчитать количество строк в таблице (COUNT)?
Хочу узнать, сколько всего записей в таблице пользователей, и сколько из них с заполненным email. Как посчитать количество строк в SQL? В чём разница между COUNT(*) и COUNT(столбец)?
2 ответа
Количество строк считает агрегатная функция COUNT:
SELECT COUNT(*) FROM users;
Это вернёт общее число строк в таблице.
Ключевое различие:
COUNT(*)— считает все строки, включая те, где есть NULL.COUNT(email)— считает только строки, гдеemailНЕ NULL.
Поэтому, чтобы узнать, у скольких пользователей заполнен email:
SELECT COUNT(email) FROM users;
Если в таблице 100 строк, но у 30 email пустой (NULL), то COUNT(*) даст 100, а COUNT(email) — 70.
Ещё вариант — COUNT(DISTINCT столбец) считает количество уникальных значений:
SELECT COUNT(DISTINCT city) FROM users;
Частая ошибка: думать, что COUNT(0) или COUNT(1) считают иначе. На самом деле COUNT(1) — это «посчитай строки, где константа 1 не NULL», то есть всё равно все строки, как и COUNT(*). Разницы в скорости в современных СУБД практически нет, пишите COUNT(*) — это понятнее.
Дополню про пустой результат: если в таблице ноль строк, COUNT(*) вернёт 0, а не NULL и не пустую выборку — будет одна строка со значением 0. Это удобно отличает COUNT от других агрегатов: например, SUM по пустой таблице вернёт именно NULL, а COUNT всегда даёт число.