Агрегатные функции... Эти штуки — настоящие волшебники в мире анализа данных! Они помогают превращать миллионы строк данных в сжатые и понятные результаты. С их помощью мы можем подсчитывать, находить минимумы и максимумы, усреднять значения и выполнять множество других операций. А теперь давайте разберём всё по порядку.
Агрегатные функции — это специальные функции SQL, которые выполняют операции над группами строк и возвращают единый результат. Е сли провести аналогию, это как если бы вы собрали всю статистику о вашем утреннем кофе, например: сколько чашек вы выпили за неделю, добавили ли сахар или сколько дней подряд добавляли сливки.
Примеры задач, которые решают агрегатные функции:
- Подсчитать общее количество записей в таблице.
- Найти минимальные или максимальные значения в числовом столбце.
- Просуммировать значения в одном из столбцов.
- Усреднить все значения столбца.
- Выделить уникальные значения.
Как это работает "под капотом"?
SQL выполняет агрегатную функцию после выборки данных в SELECT. Например, когда вы указываете SUM() или AVG(), SQL сначала собирает данные, а затем выполняет вычисление только для выбранных строк.
Основные агрегатные функции в PostgreSQL
Давайте перейдём к практике и посмотрим на топ5 наших героев:
COUNT()— считает количество строк.SUM()— суммирует значения числового столбца.AVG()— вычисляет среднее значение.MIN()— находит минимальное значение.MAX()— находит максимальное значение.
Примеры использования агрегатных функций
- Подсчёт строк с помощью
COUNT()
Функция COUNT() позволяет посчитать общее количество строк в таблице или количество непустых значений в конкретном столбце.
Пример: предположим, у нас есть таблица students, которая хранит информацию о студентах:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto Art | 20 | 85 |
| 2 | Maria Chi | 22 | 90 |
| 3 | Alex Lin | 21 | 78 |
| 4 | Anna Song | 23 | NULL |
Посчитаем общее количество студентов:
SELECT
COUNT(*) AS total_students
FROM students;
Результат:
| total_students |
|---|
| 4 |
Теперь посчитаем количество студентов, у которых указан grade:
SELECT
COUNT(grade) AS students_with_grades
FROM students;
Результат:
| students_with_grades |
|---|
| 3 |
Почему так получилось? Потому что COUNT(column) игнорирует значения NULL.
- Суммирование с помощью
SUM()
Функция SUM() используется для суммирования всех значений в числовом столбце.
Пример: давайте узнаем, сколько суммарно баллов набрали наши студенты.
SELECT
SUM(grade) AS total_grades
FROM students;
Результат:
| total_grades |
|---|
| 253 |
Примечание: Если в столбце есть NULL, они просто игнорируются в суммировании.
- Среднее значение с помощью
AVG()
Функция AVG() вычисляет среднее значение по всем числовым записям в столбце.
Пример: посчитаем средний балл студентов.
SELECT
AVG(grade) AS average_grade
FROM students;
Результат:
| average_grade |
|---|
| 84.33 |
Вы могли заметить, что NULL снова игнорируются.
- Минимум и максимум с
MIN()иMAX()
Иногда нужно найти самое маленькое или самое большое значение. Для этого существуют MIN() и MAX().
Пример: Найдём самого младшего и самого старшего студента.
SELECT
MIN(age) AS youngest_student,
MAX(age) AS oldest_student
FROM students;
Результат:
| youngest_student | oldest_student |
|---|---|
| 20 | 23 |
Подробнее об этих функциях мы поговорим уже в следующих лекциях.
Знакомство с NULL
Про NULL скоро будет отдельная лекция, но если очень коротко, то NULL - это отсутствие значения. Ничего. Пустота. Нулик, как он есть!
Предположим, у нас есть таблица students, которая хранит информацию о студентах:
| id | name | age | grade | hobbie |
|---|---|---|---|---|
| 1 | Otto Art | 20 | 85 | |
| 2 | Maria Chi | 22 | 90 | Танцы |
| 3 | Alex Lin | 21 | 78 | |
| 4 | Anna Song | 23 |
Имя и возраст есть всегда, а вот оценка и хобби могут отсутствовать. Если в ячейке таблицы вообще нет никакого значения, то про нее говорят, что она содержит NULL. NULL это не число и не строка, это специальное кодовое обозначение, обозначающее отсутствие любого значения.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ