Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Агрегатные функции Основы SQL

Язык 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 — среднее).

В таблице ниже вы увидите, как это происходит:

eyJpZCI6ImFlMGM3NGM3YjQ1YTkyOGU3OTQ1ZTdhM2U0YzE5ZGNiLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=521b697a0d36595c4542d17ffd735b432e2f0b3abd35aab5869ab231f27b2ef9

Работает функция так же как и 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, а с полным списком вы можете ознакомиться в документации.


Дополнительные материалы

  1. AGGREGATE FUNCTIONS

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 9 мая
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 9 мая
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 9 мая
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 9 мая
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 9 мая
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 9 мая
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 9 мая
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 9 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

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