Функция SQL Server MAX()

В этом руководстве вы узнаете, как использовать функцию SQL Server MAX() для поиска максимального значения в наборе.

Введение в функцию SQL Server MAX()

В SQL Server функция MAX() — это агрегатная функция, которая возвращает максимальное значение в наборе.

Вот синтаксис функции MAX():

MAX(expression)

Функция MAX() принимает выражение, которое может быть столбцом или допустимым выражением.

Подобно функции MIN(), функция MAX() игнорирует NULL и учитывает все значения, включая дубликаты.

Примеры функций SQL Server MAX()

Для демонстрации мы будем использовать таблицы продуктов и брендов:

продукты бренды

1) Базовый пример функции SQL Server MAX()

Следующий оператор использует функцию MAX() для поиска самой высокой цены по прейскуранту среди всех продуктов в таблице продуктов:

SELECT
    MAX(list_price) max_list_price
FROM
    production.products;

Выход:

max_list_price
--------------
11999.99

В следующем примере функция MAX() используется в подзапросе для поиска самой высокой цены по прейскуранту, а внешний запрос — для извлечения продуктов с самыми высокими ценами:

SELECT
  product_id,
  product_name,
  list_price
FROM
  production.products
WHERE
  list_price =(
    SELECT
      MAX(list_price)
    FROM
      production.products
  );

Выход:

product_id | product_name                  | list_price
-----------+-------------------------------+-----------
155        | Trek Domane SLR 9 Disc - 2018 | 11999.99
(1 row)

В этом примере:

  • Сначала используйте функцию MAX() в подзапросе, чтобы вернуть самую высокую цену по прейскуранту среди всех продуктов.
  • Затем извлеките продукты, цены по прейскуранту которых равны самой высокой цене, возвращенной подзапросом во внешнем запросе.

2) Пример использования MAX() с предложением GROUP BY

В следующем операторе используется функция MAX() с предложением GROUP BY для извлечения названий брендов и максимальной цены по прейскуранту для каждого бренда:

SELECT
  brand_name,
  MAX(list_price) max_list_price
FROM
  production.products p
  INNER JOIN production.brands b ON b.brand_id = p.brand_id
GROUP BY
  brand_name
ORDER BY
  brand_name;

Выход:

Функция SQL Server MAX с предложением GROUP BY

В этом примере:

  • Сначала разделите продукты на группы по названиям брендов, используя предложение GROUP BY.
  • Затем примените функцию MAX() к каждой группе, чтобы получить самую высокую цену по прейскуранту для каждого наименования бренда.

3) Пример использования MAX() с предложением HAVING

В следующем примере извлекаются названия брендов и соответствующие им самые высокие цены по прейскуранту, а также отфильтровываются бренды с самыми высокими ценами по прейскуранту, которые меньше или равны 1000:

SELECT
    brand_name,
    MAX(list_price) max_list_price
FROM
    production.products p
    INNER JOIN production.brands b
        ON b.brand_id = p.brand_id 
GROUP BY
    brand_name
HAVING 
    MAX(list_price) > 1000
ORDER BY
    max_list_price DESC;

Выход:

brand_name   | max_list_price
-------------+--------------
Trek         | 11999.99
Electra      | 2999.99
Heller       | 2599.00
Surly        | 2499.99
Sun Bicycles | 1559.99
Haro         | 1469.99
(6 rows)

4) Использование функции MAX() со столбцами дат

В следующем примере функция MAX() используется для поиска заказов с самой поздней требуемой датой:

SELECT
  MAX(required_date) latest_required_date
FROM
  sales.orders;

Выход:

latest_required_date
--------------------
2018-12-28

В следующем примере функция MAX() используется с предложением GROUP BY для поиска последней требуемой даты всех заказов, сгруппированных по именам сотрудников:

SELECT
  s.first_name,
  MAX(required_date) latest_required_date
FROM
  sales.orders o
  INNER JOIN sales.staffs s ON s.staff_id = o.order_id
GROUP BY
  s.first_name
ORDER BY
  latest_required_date;

Выход:

first_name | latest_required_date
-----------+---------------------
Fabiola    | 2016-01-03
Mireya     | 2016-01-04
Virgie     | 2016-01-04
Genna      | 2016-01-05
Kali       | 2016-01-05
Jannette   | 2016-01-06
Bernardine | 2016-01-06
Marcelene  | 2016-01-07
Venita     | 2016-01-07
Layla      | 2016-01-08
(10 rows)

5) Использование функции MAX() с текстовым столбцом

Следующий оператор использует функцию MAX() для возврата последних названий продуктов, отсортированных в алфавитном порядке в каждой категории:

SELECT
  c.category_name   category_name,
  MIN(product_name) product_name
FROM
  production.products p
  INNER JOIN production.categories c ON c.category_id = p.category_id
GROUP BY
  c.category_name;

Выход:

category_name       | product_name
--------------------+------------------------------------------------
Children Bicycles   | Electra Cruiser 1(24-Inch) - 2016
Comfort Bicycles    | Electra Townie Balloon 3i EQ - 2017/2018
Cruisers Bicycles   | Electra Amsterdam Fashion 3i Ladies' - 2017/2018
Cyclocross Bicycles | Surly Straggler - 2016
Electric Bikes      | Electra Loft Go! 8i - 2018
Mountain Bikes      | Haro Flightline One ST - 2017
Road Bikes          | Surly ECR - 2018
(7 rows)

Краткое содержание

  • Используйте функцию MAX(), чтобы найти максимальное значение в наборе значений.
  • Функция MAX() игнорирует NULL.
Мирослав С.

Автор статей, ИБ-специалист