Язык SQL — не просто язык запросов, а мощный инструмент, похожий на язык программирования, хотя и очень специфичный. Как и в других языках, здесь есть функции, незаменимые в конкретных задачах: найти сумму или среднее по столбцу, минимум или максимум. Такие функции называются агрегатными.
Чтобы вызвать агрегатную функцию, нужно написать ее имя и затем в круглых скобках передать аргументы — переменные, над которыми будут совершаться действия. В этом уроке мы поближе познакомимся с агрегатными функциями и их аргументами.
Функция COUNT
Ранее в курсе мы научились выбирать все записи из таблицы. Например, мы можем выбрать все записи из таблицы пользователей с помощью такого запроса:
SELECT * FROM users;
View on DB Fiddle
Запрос вернет нам много строк, но точное их количество мы не знаем. Чтобы это выяснить, можно использовать функцию COUNT
— она возвращает количество записей в выборке.
Ответить на вопрос «А сколько записей содержится в таблице users
?» можно с помощью такого запроса:
SELECT COUNT(*) FROM users;
count |
---|
99 |
View on DB Fiddle
Этот запрос выведет нам ровно одно число — количество строк в запросе. Это равносильно количеству пользователей в нашей базе, потому что в этой таблице хранится информация об уникальных пользователях.
В качестве аргумента мы передали символ *
, который заменяет все поля таблицы.
Еще в качестве аргумента мы можем передать имя поля. В этом случае функция вернет нам количество строк, в которых поле НЕ равно NULL
. Выполним такой запрос:
SELECT COUNT(id) FROM users;
count |
---|
99 |
View on DB Fiddle
Этот запрос также вернул значение 99
— это количество строк, id
которых не равен NULL
.
Подадим в качестве аргумента поле email_confirmed
:
SELECT COUNT(email_confirmed) FROM users;
count |
---|
0 |
View on DB Fiddle
Этот запрос вернул 0
, потому что в таблице поле email_confirmed
не содержит никаких данных.
Обратите внимание, что COUNT
возвращает количество записей в запросе, а не в таблице:
SELECT COUNT(*) FROM users WHERE gender = 'female';
count |
---|
56 |
View on DB Fiddle
Этот запрос вернет количество девушек среди всех пользователей.
Функция SUM
Функция SUM
возвращает сумму всех значений:
SELECT SUM(spent_minutes) FROM course_reviews;
sum |
---|
2456 |
View on DB Fiddle
В этом запросе мы нашли суммарное время, проведенное всеми пользователями на онлайн-курсах.
В качестве аргумента в функцию SUM
нужно передать числовое поле. Если передать поле, в котором хранятся строки или даты, то запрос вернет ошибку.
Также, не получится передать в функцию символ *
, как мы это делали с функцией COUNT
:
-- Передадим поле с датами создания — запрос вернет ошибку
SELECT SUM(created_at) FROM course_reviews;
-- Передадим символ '*' — запрос завершится с ошибкой
SELECT SUM(*) FROM course_reviews;
Query Error: error: function sum(timestamp without time zone) does not exist Query Error: error: function sum() does not exist
View on DB Fiddle
Функция AVG
Чтобы найти среднее арифметическое всех значений, нужно воспользоваться функцией AVG
(average — среднее).
В таблице ниже вы увидите, как это происходит:
Работает функция так же как и SUM
. В качестве аргумента нужно передать числовое поле.
Найдем среднее время, проведенное пользователем с id = 9
на площадке онлайн-школы:
SELECT AVG(spent_minutes) FROM course_reviews WHERE user_id = 9;
avg |
---|
25.6666666666666667 |
View on DB Fiddle
Функции MAX
и MIN
Функции MAX
и MIN
позволяют найти максимальное и минимальное значение соответственно. Найдем максимальное время прохождения курса:
SELECT MAX(spent_minutes) FROM course_reviews;
max |
---|
100 |
View on DB Fiddle
А теперь найдем минимальное время:
SELECT MIN(spent_minutes) FROM course_reviews;
min |
---|
1 |
View on DB Fiddle
В качестве аргументов в функции MAX
и MIN
можно передавать поля числовых типов, а так же даты и строки. Для строк минимальное и максимальное значения — это первая и последняя строки, упорядоченные по алфавиту:
SELECT MIN(username) FROM users;
min |
---|
Abelardo58 |
View on DB Fiddle
Запрос с функцией MIN
выведет пользователя Abelardo58
, потому что он идет первым по алфавиту.
Рассмотрим еще один пример:
SELECT MAX(username) FROM users;
max |
---|
Zoey24 |
View on DB Fiddle
Запрос с функцией MAX
выведет пользователя Zoey24
, потому что он идет по алфавиту последним.
Выводы
В этом уроке мы познакомились с агрегатными функциями:
-
COUNT
- позволяет подсчитать количество строк -
SUM
- позволяет найти сумму чисел -
AVG
- позволяет подсчитать среднее арифметическое -
MAX
- возвращает максимальное значение численного поля или последнюю строку по алфавиту -
MIN
- возвращает минимальное значение численного поля или первую строку по алфавиту
Мы рассмотрели только основные функции языка SQL, а с полным списком вы можете ознакомиться в документации.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты