COUNT в SQL: подсчет записей и группировка данных

Всем привет! Сегодня разберём одну из самых частых и базовых операций в 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, но принцип одинаковый для всех:

  1. Скачайте и установите PostgreSQL: официальная инструкция
  2. Запустите сервис:
    sudo service postgresql start

    или

    pg_ctl -D /usr/local/var/postgres start
  3. Зайдите в psql (CLI клиент):
    psql -U postgres
  4. Создайте тестовую базу и таблицу:
    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 и индексы. Если хотите углубиться, читайте доки для вашей СУБД:

Экспериментируйте, стройте отчёты, и пусть ваши запросы всегда будут быстрыми!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *