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_id first_name last_name favorite_website
4000 Justin Bieber google.com
5000 Selena Gomez bing.com
6000  Mila Kunis yahoo.com
7000 Tom Cruise oracle.com
8000 Johnny Depp NULL
9000 Russell Crowe google.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_number first_name last_name salary dept_id
1001 Justin Bieber 62000 500
1002 Selena Gomez 57500 500
1003 Mila Kunis 71000 501
1004 Tom Cruise 42000 501

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

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

total
3

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

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

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

employee_number first_name last_name salary dept_id
1001 Justin Bieber 62000 500
1002 Selena Gomez 57500 500
1003 Mila Kunis 71000 501
1004 Tom Cruise 42000 501

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

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

dept_id total
500 2
501 1

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

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

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

employee_number first_name last_name salary dept_id
1001 Justin Bieber 62000 500
1002 Selena Gomez 57500 500
1003 Mila Kunis 71000 501
1004 Tom Cruise 42000 501

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

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

total
2

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

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

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

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

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

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