SQL функция COUNT

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

Описание

SQL функция COUNT используется для подсчета количества строк, возвращаемых в операторе SELECT.

Синтаксис

Синтаксис для функции COUNT в SQL.

SELECT COUNT(aggregate_expression)
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]];

Или синтаксис для функции COUNT при группировке результатов по одному или нескольким столбцам.

SELECT expression1, expression2, … expression_n,
COUNT(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n
[ORDER BY expression [ ASC | DESC ]];

Параметры или аргумент

expression1, expression2, … expression_n
Выражения, которые не инкапсулированы в функции COUNT и должны быть включены в предложение GROUP BY в конце SQL запроса
aggregate_expression
Это столбец или выражение, чьи ненулевые значения будут учитываться
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
WHERE conditions
Необязательный. Это условия, которые должны быть выполнены для выбора записей
ORDER BY expression
Необязательный. Выражение, используемое для сортировки записей в наборе результатов. Если указано более одного выражения, значения должны быть разделены запятыми
ASC
Необязательный. ASC сортирует результирующий набор в порядке возрастания по expressions. Это поведение по умолчанию, если модификатор не указан
DESC
Необязательный. DESC сортирует результирующий набор в порядке убывания по expressions

Пример — функция COUNT включает только значения NOT NUL

Не все это понимают, но функция COUNT будет подсчитывать только те записи, в которых expressions НЕ равно NULL в COUNT(expressions). Когда expressions является значением NULL, оно не включается в вычисления COUNT. Давайте рассмотрим это дальше.

В этом примере у нас есть таблица customers со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

Введите следующий запрос SELECT, которая использует функцию COUNT.

Будет выбрана 1 запись. Вот результаты, которые вы должны получить.

COUNT(customer_id)
6

В этом примере запрос вернет 6, поскольку в таблице customer есть 6 записей, а все значения customer_id НЕ равны NULL (т.е. customer_id является первичным ключом для таблицы).
Но что происходит, когда мы сталкиваемся со значением NULL с помощью функции COUNT? Давайте введем следующий оператор SELECT, который посчитает столбец favourite_website, который может содержать значения NULL.

Будет выбрана 1 запись. Вот результаты, которые вы должны получить.

COUNT(favorite_website)
5

Во втором примере будет возвращено значение 5. Поскольку одно из значений favourite_website равно NULL, оно будет исключено из вычисления функции COUNT. В результате запрос вернет 5 вместо 6.
Подсказка: Используйте первичный ключ в функции COUNT или COUNT(*), если вы хотите быть уверены, что записи не исключены в расчетах.

Пример — использование одного выражения в функции COUNT

Давайте рассмотрим пример, который показывает, как использовать функцию COUNT с одним выражением в запросе.
В этом примере у нас есть таблица employees со следующими данными:

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Введите следующий SQL оператор.

Будет выбрана 1 запись. Вот результаты, которые вы должны получить.

total
3

В этом примере мы вернем количество сотрудников, у которых зарплата превышает 50000 $. Мы присвоили COUNT(*) псевдоним total, чтобы сделать результаты наших запросов более читабельными. Теперь total будет отображаться как заголовок столбца при возврате набора результатов.

Пример — использование GROUP BY с функцией COUNT

В некоторых случаях вам потребуется использовать оператор GROUP BY с функцией COUNT. Это происходит, когда в операторе SELECT указаны столбцы, которые не являются частью функции COUNT. Давайте рассмотрим это дальше.
Опять же, используя таблицу employees, заполненную следующими данными.

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Введите следующий SQL оператор.

Будет выбрано 2 записи. Вот результаты, которые вы должны получить.

dept_idtotal
5002
5011

В этом примере функция COUNT будет возвращать количество сотрудников, которые зарабатывают более 50000 $ для каждого dept_id. Поскольку столбец dept_id не включен в функцию COUNT, он должен быть указан в операторе GROUP BY.

Пример — использование DISTINCT с функцией COUNT

Знаете ли вы, что вы можете использовать DISTINCT в функции COUNT? Это позволяет рассчитывать только уникальные значения.
Используя ту же таблицу employees, что и в предыдущем примере.

employee_numberfirst_namelast_namesalarydept_id
1001JustinBieber62000500
1002SelenaGomez57500500
1003MilaKunis71000501
1004TomCruise42000501

Введите следующий SQL оператор.

Будет выбрана 1 запись. Вот результаты, которые вы должны получить.

total
2

В этом примере функция COUNT будет возвращать уникальное количество значений dept_id, в которых хотя бы один сотрудник имеет salary более 50000 $.

СОВЕТ: Настройка производительности с помощью функции COUNT

Поскольку функция COUNT будет возвращать одни и те же результаты независимо от того, какие поля NOT NULL включены в параметры функции COUNT (т.е. в скобках), вы можете использовать COUNT(1) для повышения производительности. Теперь ядру базы данных не нужно будет извлекать какие-либо поля данных, вместо этого он просто получит целочисленное значение 1.

Например, вместо ввода этого оператора.

Вы можете заменить COUNT(*) на COUNT(1), чтобы повысить производительность.

Теперь функции COUNT не нужно извлекать все поля из таблицы employees, как это было-бы при использовании синтаксиса COUNT(*). Он просто получит числовое значение 1 для каждой записи, которая соответствует вашим критериям.