SQL позволяет работать не только с отдельными строками, но и производить аналитику по всем строкам или по группе строк. Функции, возвращающие единственное значение для набора строк, называются агрегатными.

В большинстве задач можно обойтись следующим джентельменским набором агрегатных функций:

  • avg(выражение) - арифметическое среднее;
  • min(выражение) - минимальное значение выражения;
  • max(выражение) - маскимальное значение выражения;
  • sum(выражение) - сумма значений выражения;
  • count(*) - количество строк в результате запроса;
  • count(выражение) - количество значений выражения, не равных NULL.

Если в SQL запросе не используется GROUP BY, то значение агрегатной функции вычисляется по всем строкам, полученным в результате выполнения инструкций FROM и WHERE.

Чтобы вызвать агрегатную функцию необходимо указать ее в списке выборки (после SELECT). Если в SELECT использована хотя бы одна агрегатная функция, то значениями других столбцов могут быть только вызовы агрегатных функций, либо константы. Попробуем воспользоваться агрегатными функциями на следующей таблице:

SELECT *
  FROM table1
value
1
2
3
NULL
SELECT avg(value),
       min(value),
       max(value),
       sum(value),
       count(*) as count_total,
       count(value) as count_value
  FROM table1
avg min max sum count_total count_value
2 1 3 6 4 3

При попытке вызова агрегатной функции вместе с выводом столбца таблицы в списке выборки возникнет ошибка:

SELECT product_id,
       max(count)
  FROM purchase_item
column "purchase_item.product_id" must appear in the GROUP BY clause or be used in an aggregate function

И это логично. Агрегатная функция должна вернуть одно значение на весь набор данных (в нашем запросе одну строку), а какое значение product_id взять из всех строк? Помимо агрегатных функций есть еще аналитические функции, которые не изменяют количество строк в результате выборки, но при этом позволяют вычислять значения по набору строк. С ними мы познакомимся позднее.

3.10 Синтаксис через WHERE

4.2 NULL значения в агрегатных функциях