Перейти к основному содержимому

SQL MAX

Агрегатная функция SQL MAX позволяет вычислить максимальное значение из столбца. Этот вид измерения полезен для понимания распределения значений столбца, определения самых последних временных меток ключевых событий и создания булевых значений из операторов CASE WHEN для упрощения полуструктурированных данных.

Как использовать функцию SQL MAX в запросе

Используйте следующий синтаксис, чтобы найти максимальное значение поля:

max(<field_name>)

Поскольку MAX является агрегатной функцией, вам понадобится оператор GROUP BY в вашем запросе, если вы хотите получить подсчеты, разбитые по измерениям. Если вы вычисляете максимальное значение полей без необходимости разбивать их по другому полю, оператор GROUP BY не нужен.

MAX также может использоваться как оконная функция для работы с указанными или разделенными строками.

Давайте рассмотрим практический пример использования MAX и GROUP BY ниже.

Пример использования MAX

Следующий пример выполняет запрос из образца набора данных, созданного dbt Labs, под названием jaffle_shop:

select
date_part('month', order_date) as order_month,
max(amount) as max_amount
from {{ ref('orders') }}
group by 1

Этот простой запрос может быть выполнен на этапе начального исследования данных; он вернет максимальную сумму заказа amount за каждый месяц заказа, который появляется в таблице orders магазина Jaffle:

order_monthmax_amount
158
230
356
426

Синтаксис функции SQL MAX в Snowflake, Databricks, BigQuery и Redshift

Все современные хранилища данных поддерживают возможность использования функции MAX (и следуют одному и тому же синтаксису!).

Примеры использования функции MAX

Чаще всего мы видим запросы с использованием MAX для:

  • Проведения начального исследования данных в наборе данных для понимания распределения значений столбца.
  • Определения самой последней временной метки для ключевых событий (например, max(login_timestamp_utc) as last_login).
  • Создания описательных булевых значений из операторов case when (например, max(case when status = 'complete' then 1 else 0 end) as has_complete_order).
  • Установления самой последней временной метки из таблицы для корректной фильтрации строк при инкрементальной сборке моделей.

Это не исчерпывающий список случаев, где ваша команда может использовать MAX в процессе разработки, моделях dbt и логике BI-инструментов, но он содержит некоторые общие сценарии, с которыми аналитики сталкиваются ежедневно.

0