JavaRush /Курсы /SQL SELF /Подсчёт количества строк с COUNT() и его ва...

Подсчёт количества строк с COUNT() и его варианты

SQL SELF
7 уровень , 1 лекция
Открыта

Функция COUNT() является одной из самых популярных и полезных агрегатных функций в SQL. Её основная задача — подсчитывать количество строк в результатах запроса. Если бы функция COUNT() была супергероем в мире SQL, то её суперспособностью было бы умение быстро находить ответы на такие вопросы, как:

  • Сколько сотрудников работает в компании?
  • Какое количество студентов учится на каждом факультете?
  • Сколько товаров продано за последний месяц?

Синтаксис COUNT() довольно прост:

COUNT(столбец)

где столбец — это имя столбца, строки которого будут подсчитываться. Но есть и другие варианты использования, которые мы разберем далее в лекции.

Давайте начнем с самого базового использования COUNT().

Вариант 1: Подсчёт всех строк с помощью COUNT(*)

Когда нужно подсчитать каждую строку в таблице, независимо от того, есть ли в них данные или нет, используется COUNT(*). Звездочка означает «все столбцы».

Пример: У нас есть таблица students с таким содержимым:

id name age
1 Otto 20
2 Maria 22
3 NULL 19
4 Anna 21

Выполним следующий запрос:

SELECT COUNT(*) 
FROM students;

Результат:

count
4

Функция COUNT(*) не обращает внимания на NULL-значения в отдельных столбцах, так как она просто подсчитывает количество строк в таблице.

Вариант 2: Подсчёт строк с существующими значениями в столбце COUNT(column)

Но что, если мы хотим подсчитать только те строки, где указано не-NULL значение в конкретном столбце? В этом случае используется COUNT(column).

Пример: gосчитаем количество студентов, у которых указано имя.

SELECT COUNT(name)
FROM students;

Результат:

count
3

Заметили разницу? В таблице 4 строки, но в одной из них столбец name содержит значение NULL. Функция COUNT(column) игнорирует строки, где значение столбца равно NULL.

Сравнение COUNT(*) и COUNT(column)

Так все же, чем именно отличаются два варианта использования функции: COUNT(*) и COUNT(column).

  • COUNT(*) подсчитывает все строки в таблице, включая строки с NULL в любых из столбцов.
  • COUNT(column) подсчитывает только те строки, где в указанном столбце значение не равно NULL.

Таблица для примера:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21

Запросы:

-- Подсчитает все строки.
SELECT COUNT(*) FROM students;         -- 4  -- TOTAL (все строки)

-- Подсчитает только те строки, где имя не NULL.
SELECT COUNT(name) FROM students;      -- 3  -- Считаем строки с указанным именем

-- Подсчитает только те строки, где возраст не NULL.
SELECT COUNT(age) FROM students;        -- 3  -- Считаем строки с указанным возрастом

Вариант 3: Подсчёт уникальных значений с COUNT(DISTINCT column)

Иногда нужно подсчитать только уникальные значения в столбце. Например, мы хотим узнать, сколько уникальных возрастов указано у студентов. На помощь приходит COUNT(DISTINCT column).

Пример:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(DISTINCT age) FROM students;

Результат:

count
3

Обратите внимание, что в данном случае DISTINCT игнорирует не только дубли, но и NULL-значения.

Если вы попытаетесь использовать DISTINCT вместе с COUNT(*), получите ошибку: DISTINCT можно применять только к конкретным столбцам.

Примеры использования COUNT() в реальных задачах

Пример 1. Подсчет количества студентов

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(*) AS total_students
FROM students;

Результат:

total_students
4

Пример 2. Подсчет студентов с известным возрастом

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(age) AS students_with_age
FROM students;

Результат:

students_with_age
3

Пример 3. Подсчет уникальных возрастов

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 20
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;

Результат:

unique_ages
2

Типичные ошибки при использовании COUNT()

Ожидание, что COUNT(column) подсчитает все строки, даже если есть NULL.

Это неправда: COUNT(column) игнорирует строки с NULL в указанном столбце.

Использование COUNT(*) для подсчёта уникальных значений.

Вместо этого используйте COUNT(DISTINCT column).

Забывчивость при подсчёте конкретных данных с фильтрацией.

Например:

SELECT COUNT(*) FROM students WHERE age > 20;

Здесь вы получите только студентов старше 20 лет, а WHERE уже фильтрует строки до подсчета.

Эти нюансы часто приводят к логическим ошибкам в запросах. Будьте внимательны!

2
Задача
SQL SELF, 7 уровень, 1 лекция
Недоступна
Подсчёт всех строк в таблице
Подсчёт всех строк в таблице
2
Задача
SQL SELF, 7 уровень, 1 лекция
Недоступна
Подсчёт строк с ненулевой ценой
Подсчёт строк с ненулевой ценой
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anemon Уровень 13 Expert
12 августа 2025
В этот раз снова задание которое никак не соотносится с уроком. Вспоминаются старые добрые времена изучения джавы..)0
Anemon Уровень 13 Expert
12 августа 2025
😗
Sergii Kononenko Уровень 16
4 августа 2025
👎
Denis Murashko Уровень 25
3 августа 2025
забавно,что решенеие из раздела - правильное решение не подходит...ошибку так и не исправили
Евгений Уровень 49 Expert
17 июля 2025
второе задание косячное. Надо обязательно предварительно отфильтровывать строки с NULL, хотя COUNT сделает это сам. Ну и к тому же половина лекции об этом была.
Иван Фетисов Уровень 4
10 июля 2025
опечатка Вариант 2: Подсчёт строк с существующими значениями в столбце COUNT(column) Но что, если мы хотим подсчитать только те строки, где указано не-NULL значение в конкретном столбце? В этом случае используется COUNT(column). Пример: gосчитаем количество студентов, у которых указано имя.
Svetlana Kalsina Уровень 22
10 июля 2025
Не очень понимаю, зачем писать отдельно условие "where price is not null" во второй задаче, если "count(price)" итак посчитает только не null значения?
Nurken Уровень 20
8 июля 2025
Зачем писать AS COUNT? если и так возвращает то же наименование COUNT с количеством