Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Счетчик в SQL

26759
13 минут чтения
Средний рейтинг статьи: 2.6

Язык SQL, также известный как язык структурированных запросов, считается одним из самых широко используемых инструментов для управления информацией в реляционных базах данных, предоставляет множество функций и инструментов для анализа и организации информации. Одной из полезных, но часто недооцененных возможностей SQL является использование счетчика. В роли счетчика выступает функция COUNT(). Она предоставляет возможность подсчитать число строк в таблице или вычислить количество уникальных значений в определенном столбце. Несмотря на свою кажущуюся простоту, COUNT() может привести к потенциальным трудностям, особенно, если вы сталкиваетесь с большим объемом данных или их непривычной структурой. 

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

Миграция в облако

Перенесем вашу инфраструктуру в облако — быстро,
безопасно и с гарантией результата.

Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.

Функция COUNT()

Счетчик в SQL таблице или «счетчик строк» — это функциональность, которая позволяет подсчитывать количество строк в таблице, удовлетворяющих определенному условию. Это может быть полезно во множестве ситуаций, начиная от определения количества записей в таблице до сложных аналитических запросов на подсчет числа уникальных записей, соответствующих определенным критериям. 

Один из самых распространенных примеров использования счетчика строк в SQL — это функция COUNT(). Эта встроенная функция оценивает количество строк в таблице или количество уникальных значений в столбце. Она может быть применена к одному столбцу или ко всей таблице. 

Синтаксис команды COUNT() в SQL имеет следующий вид: 

    
  • column_name — это имя столбца, строки которого вы хотите подсчитать;

  • table_name — это имя таблицы, откуда берутся данные;

  • condition — это необязательное условие, позволяющее фильтровать строки перед подсчетом.

Если ваша цель — подсчитать все строки в таблице, не обращая внимания на их конкретные значения, вы можете применить символ * вместо указания имени колонки, как показано ниже: 

    

Примеры использования

Рассмотрим несколько примеров использования оператора COUNT() в SQL. 

В данном руководстве для работы с таблицами мы будем использовать систему управления базами данных (СУБД) SQLite. Вы можете скачать с официального сайта Обозреватель для SQLite — бесплатую программу с открытым исходным кодом, предназначенную для создания и редактирования баз данных SQLite.

Запустите DB Browser for SQLite и перейдите на вкладку SQL, где мы будем писать запросы для создания таблиц и подсчета строк.

Image4

Предположим, у вас есть таблица «Purchases», которая содержит информацию о заказах:

PurchaseID

BuyerID

Product

1

101

Apple

2

102

Banana

3

103

Cherry

4

101

Banana

5

104

Cherry

Для создания такой таблицы используйте следующий запрос:

    

После запуска SQL-запроса перейдите на вкладку «Структура БД» и убедитесь, что таблица успешно создалась: 

Image5

Теперь нам надо заполнить нашу таблицу данными, для этого запустите следующий запрос:

    

На вкладке «Данные» отображается наша заполненная таблица:

Image3

Теперь, если вы хотите узнать общее количество заказов, можно использовать простой COUNT с символом *:

    

Это подсчитает и вернет общее число записей в таблице «Purchases». Результатом выполнения это запроса будет 5.

Image1

Допустим, у вас есть таблица «Buyers» и вы хотите узнать, сколько уникальных стран представлено среди адресов ваших клиентов:

BuyerID

FirstName

BuyerCountry

101

Ivan

Russia

102

Alice

USA

103

Bob

USA

104

John

Canada

105

Petr

Russia

Аналогично тому, как мы создавали таблицу «Purchases», создадим таблицу «Buyers»:

    

И заполним ее данными:

    

В таблице видно, что колонка BuyerCountry включает в себя несколько стран, но некоторые страны повторяются (например, Russia). 

Если вы хотите подсчитать количество уникальных стран, то есть исключить повторяющиеся значения, вы можете использовать COUNT с ключевым словом DISTINCT:

    

Это подсчитает и вернет число уникальных стран в столбце BuyerCountry таблицы «Buyers». В результате выполнения этого запроса будет выведено 3

Image2

Иногда вы хотите посчитать только строки, соответствующие определенному условию. Заказы в этой таблице сделаны клиентами из разных стран:

PurchaseID

BuyerID

Product

BuyerCountry

1

101

Apple

Russia

2

102

Banana

USA

3

103

Cherry

USA

4

101

Banana

Russia

5

104

Cherry

Russia

У нас уже создана такая таблица «Purchases», но в ней отсутствует столбец BuyerCountry, добавим его:

    

И заполним данными:

    

Предположим, вы хотите узнать, сколько заказов было сделано клиентами из России. Вы можете использовать COUNT с условием WHERE:

    

Этот SQL-запрос со счетчиком подсчитает и вернет только те заказы, которые были сделаны клиентами из России. Результатом выполнения этого запроса будет 3

Когда нужно подсчитать количество записей в определенной группе, используется функция GROUP BY

PurchaseID

BuyerID

Product

1

101

Apple

2

102

Banana

3

103

Cherry

4

101

Banana

5

104

Cherry

6

101

Apple

Изменим нашу имеющуюся таблицу «Purchases», добавим новую строку: 

    

Например, вы хотите узнать, сколько заказов было сделано каждым клиентом: 

    

Это запрос сначала группирует заказы по BuyerID, а дальше подсчитывает количество заказов для каждого клиента. В результате выполнения этого запроса будет выведено:

BuyerID

COUNT(*)

101

3

102

1

103

1

104

1

Предположим, у вас есть таблица «Ratings», которая содержит оценки товаров пользователями:

RatingID

ProductID

UserID

Rating

1

101

1

4.0

2

102

2

3.5

3

101

3

4.5

4

103

1

5.0

5

101

2

3.0

6

102

3

4.5

Создадим таблицу:

    

В этой таблице каждая строка представляет оценку конкретного товара отдельным пользователем.

Теперь вы хотите узнать, сколько всего оценок было поставлено каждому товару и какова их средняя оценка. Вы можете использовать следующий запрос для этого:

    

В результате выполнения этого запроса будет выведено:

ProductID

COUNT(*)

AVG(Rating)

101

3

3.83

102

2

4.0

103

1

5.0

Таким образом, вы видите, что товар с ID 101 был оценен 3 раза и его средняя оценка 3.83, товар с ID 102 был оценен 2 раза со средней оценкой 4.0, и товар с ID 103 был оценен 1 раз со средней оценкой 5.0. 

Иногда нужно отфильтровать результаты подсчета. Представим, что у нас есть таблица, где содержатся оценки пользователей для различных товаров. 

RatingID

ProductID

UserID

Rating

1

101

1

4.0

2

101

2

3.5

101

101

101

4.5

102

102

102

5.0

300

102

300

4.8

301

103

101

3.9

В этой таблице мы видим, что каждый отзыв представлен в отдельной строке с уникальным RatingID и каждому ProductID соответствуют разные Rating.

Если предположить, что мы хотим проверить, какие продукты получили больше 100 оценок от пользователей, то мы можем использовать следующий запрос:

    

В нашем случае результат будет равен 0, так как в нашей текущей таблице «Ratings» нет ни одного продукта, который получил бы более 100 оценок. Но, если ваша таблица содержит большой объем данных и вы хотите узнать, какие товары получили больше 100 оценок от пользователей, то вышеприведенный запрос предоставит вам ответ. 

Важно отметить, что HAVING применяется после GROUP BY, а не перед, как в случае с WHERE

У нас есть две таблицы: «Orders» и «Customers».

Таблица «Orders»:

OrderID

ProductID

CustomerID

1

201

1

2

202

1

3

203

2

4

204

3

Запрос для создания таблицы «Orders»:

    

Таблица «Customers»:

CustomerID

FirstName

CustomerCountry

1

Ivan

Russia

2

Jack

USA

3

John

Canada

Запрос для создания таблицы «Customers»:

    

Нас интересует присоединение (JOIN) двух таблиц и подсчет (COUNT) числа строк, соответствующих определенному условию:

    

В запросе используется LEFT JOIN для объединения таблиц по полю CustomerID. Смысл LEFT JOIN состоит в том, что в итоговую таблицу будут включены все строки из левой таблицы (Orders), даже если для них не найдется соответствия в правой таблице (Customers). 

Тем не менее, за счет условия WHERE в итоговый отчет попадут только такие строки, для которых в поле Country стоит Russia. То есть, будут учтены только заказы, сделанные клиентами из России. 

Таким образом, этот запрос позволяет получить общее число заказов, выполненных клиентами из России, с использованием данных об этих заказах и клиентах из двух разных таблиц.

Image6

Представим, у вас есть таблица «Employess» с информацией о сотрудниках:

EmployeeID

FirstName

LastName

Salary

1

Ivan

Petrov

55000

2

Petr

Sidorov

75000

3

Alexey

Ivanov

70000

4

Dmitry

Sidorov

80000

5

Sergey

Petrov

90000

Запрос для создания таблицы:

    

Мы хотим узнать, сколько сотрудников в представленной таблице получают зарплату более 60000, а также отобразить это количество для каждой отдельной зарплаты в порядке убывания зарплаты. Для достижения этой цели мы можем написать следующий запрос:

    

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

Salary

COUNT(*)

90000

1

80000

1

75000

1

70000

1

Допустим, у вас есть таблица «Sales», которая содержит информацию о продажах:

SaleID

Product

Price

Quantity

1

Apple

20

5

2

Banana

15

10

3

Cherry

10

15

4

Apple

20

20

5

Banana

15

25

Запрос для создания таблицы:

    

Мы хотим узнать, сколько раз продукт Apple был продан в количестве меньше 10 или продукт Banana в количестве больше 20. Для этого можем использовать COUNT в сочетании с условиями AND и OR:

    

Этот запрос подсчитает количество продаж по указанным условиям. Результатом выполнения этого запроса будет 2.

Особенности использования

После изучения представленных практических примеров у вас не должно возникнуть вопроса: как сделать счетчик в SQL? В завершение обсудим некоторые особенности применения функции COUNT(), чтобы вы могли свободно и без препятствий использовать ее в своей работе: 

  1. Работа с NULL-значениями: функция COUNT(column_name) в подсчет не включает строки с NULL-значениями. Если вам нужно учесть эти строки, следует использовать COUNT(*).

  2. Использование с DISTINCT: если COUNT() используется в сочетании с DISTINCT, это приводит к подсчету только уникальных значений в выбранной колонке. 

  3. Применение с GROUP BY: COUNT() часто используют с оператором GROUP BY, чтобы подсчитывать количество строк в каждой группе. 

  4. Целочисленный результат: независимо от типа данных аргумента, функция COUNT() всегда возвращает целочисленное значение. 

  5. Использование в подзапросах: COUNT() может быть использован в подзапросах для получения количества строк, которые соответствуют определенным критериям. 

  6. Использование в триггерах: COUNT() может быть использован в триггерах SQL для подсчета количества измененных строк.

  7. Работа с большими таблицами: когда используется COUNT() на большом объеме данных, запрос может занять значительное время. В таких случаях следует подумать о проведении оптимизации запросов. 

  8. Работа с совместными (JOIN) таблицами: когда используются запросы с запутанными связями между таблицами, подсчет может стать сложной задачей. Выполнение таких запросов требует от вас понимания структуры базы данных. 

Подготовили для вас выгодные тарифы на DBaaS

Cloud DB 1/1/8

447 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
Диск NVMe
8 ГБ
Приватный IP
Есть
Резервные копии
Есть
Cloud DB 1/2/20

711 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
Диск NVMe
20 ГБ
Приватный IP
Есть
Резервные копии
Есть
Таблица тарифов
Сравнение тарифов
Cloud DB 1/1/8
496
Cloud DB 1/2/20
790
Cloud DB 2/2/30
1160
Cloud DB 2/4/40
1580
Cloud DB 4/8/80
3160
Cloud DB 4/12/120
4240
Cloud DB 6/12/180
5460
Cloud DB 8/16/220
7040
Процессор1 x 3.3 ГГц1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память1 ГБ2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe8 ГБ20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть

Заключение

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

26759
13 минут чтения
Средний рейтинг статьи: 2.6
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server