Агрегатные функции вычисляют одно результирующее значение из набора значений в нескольких строках или столбцах таблицы. Они используются для статистического анализа данных, подсчета записей и формирования сводных отчетов, обрабатывая группы строк и возвращая единственное значение. Эти функции часто используются с предложением GROUP BY для получения статистических данных по категориям.
Подсчёт кол-ва записей с уникальным (DISTINCT) значением поля name.
SELECT COUNT(DISTINCT name) as uniq_name FROM clients;
Команда ALL отличается от DISCTINCT тем, что не берёт в счёт значения с NULL.
SELECT COUNT(ALL name) as uniq_name FROM clients;
Поиск записи с максимальным значением поля age.
SELECT MAX(age) as max_age FROM clients;
Так же можно выполнять арифметические операции, добавим 10 к записи с максимальным значением поля age.
SELECT MAX(age) as max_age FROM clients;
Так же можем выполнять математические операции между полями записей.
SELECT MAX(age + weight) as max_age FROM clients;
Используя команду SUM мы можем сложить содержимое полей и вывести в качестве нового поля.
SELECT SUM(age) AS total FROM clients;
В результате мы получим значение суммы в колонке total. Как вы уже заметили в таблице колонки total у нас нет, мы задали псевдоним (или alias) для выводимого результата в самом запросе за счёт использования команды AS. Псевдонимы можно задать как для самих имен таблиц, так и полей.
Группировка значений
Когда одно поле может содержать несколько одинаковых значений, для удобства отображения их можно сгруппировать с помощью команды GROUP BY.
SELECT name, SUM(age) AS total FROM clients GROUP BY name;
После выполнения данной команды, будут сгруппированы записи по полю name, а также сумма значений поля age для каждого уникального значения поля name.
Фильтрация сгруппированных значений
В SQL, предложение HAVING используется для фильтрации групп данных после применения операции GROUP BY. В отличие от предложения WHERE, которое фильтрует отдельные строки до группировки, HAVING применяется к результатам агрегатных функций (таких как SUM(), COUNT(), AVG()) и позволяет выбрать группы, отвечающие заданным условиям.
Как работает HAVING:
Группировка:
Сначала SQL-запрос использует GROUP BY для объединения строк в группы на основе общих значений в указанных столбцах.
Агрегация:
Для каждой группы вычисляются агрегатные функции (например, подсчитывается общее количество элементов в каждой группе).
Фильтрация:
Затем предложение HAVING проверяет условия для полученных групп и агрегированных значений, отбирая только те группы, которые соответствуют заданному критерию.
SELECT name, SUM(age) AS total FROM Clients GROUP BY name HAVING AVG(age)<30;
В данном примере стоит отметить так же функцию AVG(). В SQL функция AVG() используется для вычисления среднего арифметического числового столбца, суммируя значения и деля их на количество непустых записей. Синтаксис функции: SELECT AVG(имя_столбца) FROM имя_таблицы WHERE условие;. Важно помнить, что AVG() игнорирует значения NULL.
Таким образом мы выбираем записи пользователей, сгруппированных по полю name, у которых среднее значение возраста (поле age) меньше 30.
Другой пример использования функции AVG() – можем выбрать средний возраст пользователей с каждым уникальным именем.
SELECT name, AVG(age) AS average_age FROM clients GROUP BY name;
В результате получим средний возраст пользователей для каждого имени.