Функция SQL Server COUNT()

В этом руководстве вы узнаете, как использовать функцию SQL Server COUNT() для получения количества элементов в наборе.

Введение в функцию SQL Server COUNT()

SQL Server COUNT() — это агрегатная функция, которая возвращает количество элементов в наборе.

Ниже показан синтаксис функции COUNT():

COUNT([ALL | DISTINCT  ] expression)

В этом синтаксисе:

  • ALL указывает функции COUNT() применяться ко всем значениям. ALL — значение по умолчанию.
  • DISTINCT указывает функции COUNT() возвращать количество уникальных ненулевых значений.
  • выражение — это выражение любого типа, кроме изображения, текста или ntext. Обратите внимание, что в выражении нельзя использовать подзапрос или агрегатную функцию.

Функция COUNT() имеет еще одну форму:

COUNT(*)

В этой форме COUNT(*) возвращает количество строк, удовлетворяющих определенному условию. COUNT(*) не поддерживает DISTINCT и не принимает параметров. Он подсчитывает каждую строку отдельно и включает строки, содержащие значения NULL.

В итоге:

  • COUNT(*) подсчитывает количество элементов в наборе. Включает NULL и повторяющиеся значения.
  • COUNT(ALL expression) оценивает выражение для каждой строки в наборе и возвращает количество ненулевых значений.
  • COUNT(DISTINCT выражение) оценивает выражение для каждой строки в наборе и возвращает количество уникальных, ненулевых значений.

Примеры функции SQL Server COUNT()

Следующий оператор создает новую таблицу с именем t, вставляет в нее некоторые данные и запрашивает данные по ней:

CREATE TABLE t(
    val INT
);
INSERT INTO t(val)
VALUES(1),(2),(2),(3),(null),(null),(4),(5);
SELECT val FROM t;

Выход:

val
-----------
1
2
2
3
NULL
NULL
4
5

Базовый пример SQL Server COUNT(*)

В следующем примере функция COUNT(*) используется для возврата количества строк в таблице t:

SELECT COUNT(*) val_count
FROM t;

Выход:

val_count
---------
8

Пример SQL Server COUNT(выражение DISTINCT)

В следующем примере выражение COUNT(DISTINCT) используется для возврата количества уникальных ненулевых значений в таблице t:

SELECT
    COUNT(DISTINCT val) val_count
FROM
    t;

Ниже показан результат:

val_count
-----------
5
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row affected)

Пример SQL Server COUNT(выражение)

В следующем примере используется COUNT(выражение) для возврата количества ненулевых значений в таблице t:

SELECT
    COUNT(val)
FROM
    t;

Ниже показан результат:

val_count
-----------
6
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row affected)

Практические примеры функции COUNT()

Для демонстрации мы будем использовать таблицы из примера базы данных.

Следующий оператор использует функцию COUNT(*) для возврата количества строк в таблице продуктов:

SELECT 
    COUNT(*) product_count
FROM
    production.products;

Выход:

product_count
-------------
321
(1 row affected)

В следующем примере функция COUNT(*) используется для получения количества продуктов, модельный год которых — 2016, а цена по прейскуранту превышает 999,99:

SELECT 
   COUNT(*)
FROM 
    production.products
WHERE 
    model_year = 2016
    AND list_price > 999.99;

Выход:

Result
-----------
7
(1 row affected)

Использование функции SQL Server COUNT() с предложением GROUP BY

В следующем операторе используется функция COUNT(*) для поиска количества продуктов в каждой категории продуктов:

SELECT 
    category_name,
    COUNT(*) product_count
FROM
    production.products p
    INNER JOIN production.categories c 
    ON c.category_id = p.category_id
GROUP BY 
    category_name
ORDER BY
    product_count DESC;

Ниже показан результат:

category_name        product_count
-------------------- -------------
Cruisers Bicycles    78
Mountain Bikes       60
Road Bikes           60
Children Bicycles    59
Comfort Bicycles     30
Electric Bikes       24
Cyclocross Bicycles  10
(7 rows affected)

В этом примере сначала предложение GROUP BY разделило продукты на группы, используя названия категорий, а затем к каждой группе была применена функция COUNT().

Пример использования SQL Server COUNT() с предложением HAVING

Следующий оператор возвращает бренд и количество продуктов для каждого. Кроме того, он возвращает только бренды, у которых количество продуктов больше 20:

SELECT 
    brand_name,
    COUNT(*) product_count
FROM
    production.products p
    INNER JOIN production.brands c 
    ON c.brand_id = p.brand_id
GROUP BY 
    brand_name
HAVING
    COUNT(*) > 20
ORDER BY
    product_count DESC;

Вывод следующий:

brand_name           product_count
-------------------- -------------
Trek                 135
Electra              118
Surly                25
Sun Bicycles         23
(4 rows affected)

Краткое содержание

  • Используйте COUNT(*) для получения количества строк в таблице.
  • Используйте выражение COUNT(ALL) для подсчета количества ненулевых значений.
  • Используйте выражение COUNT(DISTINCT) для получения количества уникальных ненулевых значений.
Мирослав С.

Автор статей, ИБ-специалист