Всем привет! Сегодня разберём одну из самых частых и базовых операций в SQL — COUNT
. Если вам нужно узнать количество строк в таблице, сгруппировать данные и посчитать сколько записей попадает в каждую группу — это именно тот оператор, который нужен. Даже если вы уже сто раз пользовались COUNT(*)
, уверен, найдёте тут что-то полезное или вспомните забытое. Погнали!
Возможности
COUNT
— агрегатная функция, которая возвращает количество строк, подходящих под условия запроса. С её помощью можно:
- Посчитать общее количество строк в таблице
- Посчитать количество не-NULL значений в столбце
- Группировать данные и считать записи в каждой группе
- Использовать вместе с
HAVING
для фильтрации групп
Работает практически во всех реляционных БД: PostgreSQL, MySQL, SQLite, MS SQL Server и так далее.
Что требуется
- Любая современная ОС: Linux, Windows, MacOS — не принципиально
- Любая СУБД (реляционная): PostgreSQL, MySQL, SQLite — на выбор
- Терминал, SQL-клиент или GUI (DBeaver, DataGrip, pgAdmin и т.д.)
Железо? Любая современная машина, даже Raspberry Pi справится.
Установка — пошаговая инструкция
Покажу на примере PostgreSQL, но принцип одинаковый для всех:
- Скачайте и установите PostgreSQL: официальная инструкция
- Запустите сервис:
sudo service postgresql start
или
pg_ctl -D /usr/local/var/postgres start
- Зайдите в psql (CLI клиент):
psql -U postgres
- Создайте тестовую базу и таблицу:
CREATE DATABASE testdb; \c testdb CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(50), age INT ); INSERT INTO users (name, age) VALUES ('Vasya', 30), ('Petya', 25), ('Masha', 25), ('Ivan', NULL), ('Olga', 30);
Всё, можно экспериментировать с COUNT
!
Использование: полный список команд и вариантов
Вот основные способы использования COUNT
:
- Посчитать все строки:
SELECT COUNT(*) FROM users;
Посчитает все строки, даже если в столбцах NULL.
- Посчитать только не-NULL значения в столбце:
SELECT COUNT(age) FROM users;
Посчитает только те записи, где age не NULL.
- Группировка по столбцу:
SELECT age, COUNT(*) FROM users GROUP BY age;
Покажет, сколько пользователей каждого возраста (NULL попадёт в отдельную группу, зависит от СУБД).
- Группировка с фильтрацией (HAVING):
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;
Покажет только те возраста, где пользователей больше одного.
- Уникальные значения:
SELECT COUNT(DISTINCT age) FROM users;
Посчитает количество уникальных возрастов (NULL не считается).
Ошибки, как делать не надо
- Не используйте COUNT(столбец), если в столбце могут быть NULL: получите меньшее число, чем реально строк.
- COUNT(*) не считается быстрее, чем COUNT(1): в большинстве СУБД это одно и то же, не надо спорить в курилке.
- COUNT(DISTINCT …): на больших таблицах может быть очень медленным, особенно без индексов.
- Не забывайте про GROUP BY: если его не указать, получите общее количество, а не по группам.
Пример реального использования в окружении
Допустим, у вас есть таблица логов, и вы хотите узнать, сколько уникальных пользователей заходят на сайт каждый день:
SELECT DATE(login_time) AS day, COUNT(DISTINCT user_id) AS unique_users FROM logins GROUP BY day ORDER BY day DESC LIMIT 10;
Это реальный запрос из мониторинга, который крутится у меня на проде. Помогает быстро понять, когда проседает трафик или что-то идёт не так.
Заключение
Функция COUNT
— это ваш швейцарский нож для анализа данных в SQL. Она простая, быстрая и универсальная. Главное — помнить про NULL, GROUP BY и индексы. Если хотите углубиться, читайте доки для вашей СУБД:
Экспериментируйте, стройте отчёты, и пусть ваши запросы всегда будут быстрыми!
Ваш отзыв