Три строки условной таблицы объединяются стрелкой в один числовой показатель.
7 ноябрь 20264 мин

Как один показатель получается из нескольких строк таблицы

На условной таблице разберём, как выбрать количество, сумму или максимум и учесть пропущенные значения.

Один показатель получают из нескольких строк по выбранному правилу: строки можно посчитать, числовые значения — сложить или выбрать наибольшее из них. Получение одного результата из набора строк называют агрегированием.

Правило зависит от вопроса. Чтобы узнать, сколько записей в наборе, считают строки. Чтобы получить общий итог, складывают значения. Чтобы найти самое большое отдельное значение, выбирают максимум. Разберём эти варианты на условной таблице, не составляя SQL-запрос.

Что происходит со строками при агрегировании

Агрегатная функция — это правило, которое вычисляет один результат по входным строкам. Его назначение описано в документации PostgreSQL 18.

Результат относится к выбранному набору: если рассмотреть только часть таблицы, показатель будет описывать эту часть. Поэтому сначала определите, какие строки нужны, а затем выберите правило расчёта.

Дальше мы рассмотрим логику показателей в PostgreSQL 18 без написания запроса.

Количество, сумма и максимум на одной таблице

Возьмём условную таблицу заказов. В ней одна строка соответствует одному заказу, а сумма указана в условных денежных единицах.

Заказ Сумма
А 200
Б 300
В 500

К этим строкам можно задать разные вопросы:

Вопрос Правило Результат
Сколько заказов записано? Посчитать строки 3 заказа
Какова общая сумма заказов? Сложить значения 200 + 300 + 500 = 1000 условных единиц
Какова наибольшая сумма одного заказа? Выбрать наибольшее значение 500 условных единиц

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

В PostgreSQL 18 для таких расчётов используют агрегатные функции: count(*) считает входные строки, sum складывает значения, а max находит наибольшее значение. Подробности и ограничения описаны в документации по агрегатным функциям.

Как выбрать показатель для своего вопроса

Перед расчётом пройдите по короткому списку:

  1. Определите набор: какие строки вы хотите рассмотреть?
  2. Уточните смысл строки: например, соответствует ли каждая строка одному заказу?
  3. Сформулируйте вопрос: нужно количество строк, общий итог по числовому столбцу или наибольшее отдельное значение?
  4. Проверьте единицы результата. В примере количество выражается числом заказов, а сумма и максимум — в условных денежных единицах.

Попробуйте сами: какой показатель выбрать для вопроса «Какова сумма самого крупного заказа?»

Ответ — максимум. Он покажет наибольшую сумму отдельного заказа. Сумма всех значений ответила бы на другой вопрос: каков общий итог заказов в выбранном наборе.

Что меняется при пропусках и пустом наборе

Представим, что сумма заказа В неизвестна. Обозначим отсутствие значения как NULL:

Заказ Сумма
А 200
Б 300
В NULL

Строк по-прежнему 3, но известных значений суммы только 2. Это различие важно: count(*) считает все входные строки, а count для значения столбца — только строки, где это значение не равно NULL.

Функции sum и max исключают NULL из расчёта. Поэтому сумма известных значений равна 200 + 300 = 500 условных единиц, а максимум среди них — 300 условных единиц. Неизвестная сумма заказа В не учтена: эти результаты не описывают общий итог и максимум с учётом её значения. Правила относятся к PostgreSQL 18 и приведены в документации по агрегатным функциям.

Отдельный случай — когда в набор не попала ни одна строка. В PostgreSQL 18 количество строк будет равно 0, а сумма и максимум вернут NULL, а не ноль. Поэтому отсутствие выбранных строк не стоит автоматически трактовать как нулевую сумму.

Чтобы закрепить разницу, возьмите небольшую таблицу и определите, что означает её строка. Затем задайте три вопроса: сколько строк, какова сумма значений и какое значение наибольшее. Выберите правило для каждого вопроса и проверьте результат вручную.

Две условные клетки с одинаковым участком ДНК и разным количеством схематичных нитей РНК.
6 ноябрь 20264 мин

Что означает, что ген работает в одной клетке иначе, чем в другой

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

Читать далее
Условная диаграмма: два признака с разным масштабом показаны до и после приведения к сопоставимому масштабу.
5 ноябрь 20264 мин

Зачем модели приводить признаки к сопоставимому масштабу

На условном примере возраста и расстояния разбираем, как масштаб признаков влияет на расчёт расстояний, что делает стандартизация и почему перед ней стоит изучить выбросы.

Читать далее
Стилизованная линейка роста с условной буквой A и символом измерения роста.
5 ноябрь 20264 мин

Чем генотип отличается от наблюдаемого признака организма

Генотип в определённом месте генома описывает вариант ДНК, а наблюдаемый признак — характеристику организма. На примере роста разберём, почему запись варианта и описание признака относятся к разным видам данных.

Читать далее
Фрагмент таблицы с числами 0 и 6 и пустой ячейкой, выделенной зелёно-бирюзовым контуром.
3 ноябрь 20264 мин

Почему пропуск в таблице нельзя автоматически считать нулём

На условной таблице заказов разбираем, чем неизвестное значение отличается от нуля, как замена пропуска влияет на среднее и что проверить перед подсчётом.

Читать далее

Остались вопросы?

Оставьте заявку и мы свяжемся с Вами в ближайшее время