Sql max: Функция SQL MAX: синтаксис, примеры
Функция SQL MAX: синтаксис, примеры
Оператор SQL MAX() — функция возвращающая максимальное значение столбца таблицы.
Функция SQL MAX() имеет следующий синтаксис:
MAX(column_name)
Примеры оператора SQL MAX: Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1: Используя оператор SQL MAX найти максимальное значение колонки Students:
SELECT MAX(Students) FROM Univerities
Ответ: 57000
Пример 2: Используя оператор SQL MAX найти максимальное значение колонки Faculties, где расположение университета (Location) — Saint-Petersburg:
SELECT MAX(Faculties) FROM Universities WHERE Location = 'Saint-Petersburg'
Ответ: 24
Пример 3: Используя оператор SQL MAX найти университет (UniversityName) с наибольшим числом преподавателей (Professores):
SELECT UniversityName FROM University WHERE Professores = (SELECT MAX(Professores) FROM Universities)
Ответ: Moscow State University
SQL MAX из нескольких столбцов?
Я предпочитаю решения, основанные на случае, когда, я предполагаю, что это должно оказать наименьшее влияние на возможное падение производительности по сравнению с другими возможными решениями, такими как с перекрестным применением, values (), пользовательскими функциями и т. Д.
Вот вариант case-when, который обрабатывает нулевые значения с большинством возможных тестовых случаев:
SELECT
CASE
WHEN Date1 > coalesce(Date2,'0001-01-01') AND Date1 > coalesce(Date3,'0001-01-01') THEN Date1
WHEN Date2 > coalesce(Date3,'0001-01-01') THEN Date2
ELSE Date3
END AS MostRecentDate
, *
from
(values
( 1, cast('2001-01-01' as Date), cast('2002-01-01' as Date), cast('2003-01-01' as Date))
,( 2, cast('2001-01-01' as Date), cast('2003-01-01' as Date), cast('2002-01-01' as Date))
,( 3, cast('2002-01-01' as Date), cast('2001-01-01' as Date), cast('2003-01-01' as Date))
,( 4, cast('2002-01-01' as Date), cast('2003-01-01' as Date), cast('2001-01-01' as Date))
,( 5, cast('2003-01-01' as Date), cast('2001-01-01' as Date), cast('2002-01-01' as Date))
,( 6, cast('2003-01-01' as Date), cast('2002-01-01' as Date), cast('2001-01-01' as Date))
,( 11, cast(NULL as Date), cast('2002-01-01' as Date), cast('2003-01-01' as Date))
,( 12, cast(NULL as Date), cast('2003-01-01' as Date), cast('2002-01-01' as Date))
,( 13, cast('2003-01-01' as Date), cast(NULL as Date), cast('2002-01-01' as Date))
,( 14, cast('2002-01-01' as Date), cast(NULL as Date), cast('2003-01-01' as Date))
,( 15, cast('2003-01-01' as Date), cast('2002-01-01' as Date), cast(NULL as Date))
,( 16, cast('2002-01-01' as Date), cast('2003-01-01' as Date), cast(NULL as Date))
,( 21, cast('2003-01-01' as Date), cast(NULL as Date), cast(NULL as Date))
,( 22, cast(NULL as Date), cast('2003-01-01' as Date), cast(NULL as Date))
,( 23, cast(NULL as Date), cast(NULL as Date), cast('2003-01-01' as Date))
,( 31, cast(NULL as Date), cast(NULL as Date), cast(NULL as Date))
) as demoValues(id, Date1,Date2,Date3)
order by id
;
и результат:
MostRecent id Date1 Date2 Date3
2003-01-01 1 2001-01-01 2002-01-01 2003-01-01
2003-01-01 2 2001-01-01 2003-01-01 2002-01-01
2003-01-01 3 2002-01-01 2001-01-01 2002-01-01
2003-01-01 4 2002-01-01 2003-01-01 2001-01-01
2003-01-01 5 2003-01-01 2001-01-01 2002-01-01
2003-01-01 6 2003-01-01 2002-01-01 2001-01-01
2003-01-01 11 NULL 2002-01-01 2003-01-01
2003-01-01 12 NULL 2003-01-01 2002-01-01
2003-01-01 13 2003-01-01 NULL 2002-01-01
2003-01-01 14 2002-01-01 NULL 2003-01-01
2003-01-01 15 2003-01-01 2002-01-01 NULL
2003-01-01 16 2002-01-01 2003-01-01 NULL
2003-01-01 21 2003-01-01 NULL NULL
2003-01-01 22 NULL 2003-01-01 NULL
2003-01-01 23 NULL NULL 2003-01-01
NULL 31 NULL NULL NULL
SQL — Функция MAX
Функция MAX в SQL используется для поиска записи с максимальным значением среди набора записей.
Чтобы понять функцию MAX, рассмотрим таблицу EMPLOYEE_TBL, которая содержит следующие записи:
SQL> SELECT * FROM employee_tbl; +----+----------+------------+--------------------+ | id | name | work_date | daily_typing_book | +----+----------+------------+--------------------+ | 1 | Dima | 2017-02-01 | 250 | | 2 | Ruslan | 2017-03-02 | 220 | | 3 | AndreyEx | 2017-01-11 | 170 | | 3 | AndreyEx | 2017-02-02 | 100 | | 4 | Masha | 2017-03-12 | 220 | | 5 | Roma | 2017-06-23 | 300 | | 5 | Roma | 2017-03-12 | 350 | +----+----------+------------+--------------------+ 7 rows in set (0.00 sec)
Теперь предположим, что на основе приведенной выше таблице вы хотите показать максимальное значение daily_typing_book, то вы можете сделать это просто с помощью следующей команды:
SQL> SELECT MAX(daily_typing_book) -> FROM employee_tbl; +-------------------------+ | MAX(daily_typing_book) | +-------------------------+ | 350 | +-------------------------+ 1 row in set (0.00 sec)
Вы можете найти все записи с максимальным значением для каждого имени, используя предложение GROUP BY следующим образом:
SQL> SELECT id, name, MAX(daily_typing_book) -> FROM employee_tbl GROUP BY name; +----+----------+-------------------------+ | id | name | MAX(daily_typing_book) | +----+----------+-------------------------+ | 3 | AndreyEx | 170 | | 4 | Masha | 220 | | 1 | Dima | 250 | | 2 | Ruslan | 220 | | 5 | Roma | 350 | +----+----------+-------------------------+ 7 rows in set (0.00 sec)
Вы можете использовать функцию MIN наряду с функцией MAX, чтобы найти минимальное значение. Попробуйте следующий пример:
SQL> SELECT MIN(daily_typing_book) least, MAX(daily_typing_book) max -> FROM employee_tbl; +-------+------+ | least | max | +-------+------+ | 100 | 350 | +-------+------+ 1 row in set (0.01 sec)
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Опция SQL Server «Maximum worker threads» [Вики IT-KB]
Опция SQL Server «Maximum worker threads»
Максимальное количество потоков (опция Maximum worker threads) в конфигурации по умолчанию в SQL Server 2016 установлено в 0. C таким значением сервер не создает больше потоков, чем рассчитано по формуле, описанной в документе Configure the max worker threads Server Configuration Option. В этом документе приводится таблица расчётных значений в зависимости от количества процессоров и битности сервера.
Например, в нашем случае используется x64 сервер с 12 ядрами. В этом случае расчёт будет выполняться по формуле 512 + ((12 logical CPU’s — 4) * 16) = 640
Увеличивая значения Maximum worker threads от рассчитываемого автоматически предела по вышеуказанной формуле, стоит помнить о том, что с увеличением этого значения повышаются накладные расходы на обслуживание экземпляра SLQ Server, выходящие за рамки параметра Maximum server memory. То есть с увеличением Maximum worker threads, нужно не забыть про перерасчёт показателя Maximum server memory.
Есть мнение что, используемого по умолчанию автоматически вычисляемого SQL Server ограничения может не хватать при большом количестве одновременных транзакций. Разумеется, чтобы сделать такое умозаключение, требуется дополнительный анализ производительности SQL Server под нагрузкой.
К тому же если верить официальной документации, в некоторых ситуациях не увеличение, а напротив, — уменьшение Maximum worker threads от рассчитываемого автоматически значения, может приводить к улучшению производительности экземпляра SQL Server.
В общем случае лучше оставить это значение опции Maximum worker threads в конфигурации по умолчанию, то есть равным 0.
Проверено на следующих конфигурациях:
Версия ОС | Версия SQL Server |
---|---|
Microsoft Windows Server 2012 R2 Standard EN (6.3.9600) | Microsoft SQL Server 2016 SP2 CU4 (13.0.5233.0) |
Автор первичной редакции:
Алексей Максимов
Время публикации: 13.02.2019 11:58
1c/setting-up-microsoft-sql-server-for-1c-enterprise-8-3/maximum-worker-threads.txt · Последнее изменение: 17.04.2019 17:08 — Алексей Максимов
mysql — SQL выбирает только строки с максимальным значением в столбце
Уникальные идентификаторы? Да! Уникальные идентификаторы!
Один из лучших способов разработки базы данных MySQL — иметь каждый id
AUTOINCREMENT
(источник MySQL.com). Это дает множество преимуществ, которых здесь невозможно описать. Проблема с вопросом в том, что в его примере есть повторяющиеся идентификаторы. Это игнорирует эти огромные преимущества уникальных идентификаторов и в то же время сбивает с толку тех, кто уже знаком с этим.
Самое чистое решение
Скрипка DB
Новые версии MySQL поставляются с ONLY_FULL_GROUP_BY
, включенным по умолчанию, и многие из решений здесь не пройдут при тестировании с этим условием.
Тем не менее, мы можем просто выбрать DISTINCT
someuniquefield , MAX (
whateverotherfield, чтобы выбрать )
, (
* somethirdfield )
и т. Д. И не беспокоиться о том, чтобы понять результат или как работает запрос. :
ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ t1.id, MAX (t1.rev), MAX (t2.content)
ИЗ Table1 AS t1
СОЕДИНЯЙТЕСЬ с таблицей 1 КАК t2 НА t2.id = t1.id И t2.rev = (
ВЫБЕРИТЕ МАКС. (Об.) ИЗ Таблица1 t3, ГДЕ t3.id = t1.id
)
ГРУППА ПО t1.id;
-
SELECT DISTINCT Table1.id, max (Table1.rev), max (Table2.content)
: вернутьDISTINCT
somefield,MAX ()
some otherfield, последнийMAX ()
является избыточным, потому что I знайте, что это всего лишь одна строка, но она требуется по запросу. -
ОТ Сотрудника
: поиск по таблице. -
JOIN Table1 AS Table2 ON Table2.rev = Table1.rev
: Присоединяйтесь ко второй таблице к первой, потому что нам нужно получить комментарий max (table1.rev). -
GROUP BY Table1.id
: Принудительно использовать сортированную по верхнему краю строку Salary каждого сотрудника как возвращаемый результат.
Обратите внимание, что, поскольку «content» был «…» в вопросе OP, нет возможности проверить, что это работает. Итак, я изменил это на «..a», «..b», так что теперь мы можем видеть, что результаты верны:
id max (Таблица1.rev) max (Table2.content)
1 3 ..d
2 1 ..b
Почему он чистый? DISTINCT ()
, MAX ()
и т. Д. — все они прекрасно используют индексы MySQL. Так будет быстрее. Или это будет намного быстрее, если у вас есть индексирование, и вы сравните его с запросом, который просматривает все строки.
Исходное решение
Если ONLY_FULL_GROUP_BY
отключен, мы все еще можем использовать GROUP BY
, но тогда мы используем его только для зарплаты, а не для идентификатора:
ВЫБРАТЬ *
ИЗ
(ВЫБРАТЬ *
ОТ Сотрудника
ЗАКАЗАТЬ ПО ЗАПЛАТЕ УДАЛЕНИЕ)
Сотрудник AS
ГРУППА ПО сотрудникамЗарплата;
-
SELECT *
: вернуть все поля. -
ОТ Сотрудника
: поиск по таблице. -
(SELECT * ...)
подзапрос: вернуть всех людей, отсортированных по зарплате. -
GROUP BY employeeub.Salary
: Принудительно выводит отсортированную по верхнему краю строку Salary каждого сотрудника в качестве возвращаемого результата.
Решение Unique-Row
Обратите внимание на определение реляционной базы данных: «Каждая строка в таблице имеет свой уникальный ключ.»Это будет означать, что в примере вопроса идентификатор должен быть уникальным , и в этом случае мы можем просто сделать:
ВЫБРАТЬ *
ОТ Сотрудника
ГДЕ Employee.id = 12345
ЗАКАЗ ПО Сотруднику. Заработная плата DESC
ПРЕДЕЛ 1
Надеюсь, это решение, которое решит проблему и поможет всем лучше понять, что происходит в БД.
Функция
SQL MAX () — w3resource
MAX () функция
Агрегатная функция SQL MAX () используется для поиска максимального или максимального значения определенного столбца или выражения.Эта функция полезна для определения наибольшего из всех выбранных значений столбца.
Синтаксис:
MAX ([ALL | DISTINCT] выражение)
Синтаксис DB2 и Oracle:
MAX ([ALL | DISTINCT] выражение) OVER (window_clause)
Параметры:
Имя | Описание |
---|---|
ВСЕ | Применяется ко всем значениям. |
РАЗЛИЧНЫЙ | Рассмотрим каждое уникальное значение.DISTINCT не имеет смысла с функцией MAX. |
выражение | Выражение, состоящее из одной константы, переменной, скалярной функции или имени столбца или любой комбинации арифметических, побитовых и строковых операторов. MAX можно использовать с числовыми, символьными столбцами и столбцами типа datetime, но не с битовыми столбцами. Агрегатные функции и подзапросы не допускаются. |
Поддержка СУБД: функция COUNT ()
СУБД | Команда |
MySQL | Поддерживается |
PostgreSQL | Поддерживается |
SQL Server | Поддерживается |
Оракул | Поддерживается |
Синтаксическая диаграмма — функция MAX ()
Пример:
Чтобы получить максимальное значение ord_amout из таблицы заказов, можно использовать следующий оператор SQL:
Образец таблицы: заказы
ВЫБРАТЬ МАКС. (Количество_орд)
ОТ заказов;
Выход:
МАКС (ORD_AMOUNT) --------------- 4500
Изображение:
SQL MAX () с добавлением двух столбцов
Чтобы получить максимальное значение (open_amt + receive_amt) из таблицы клиентов, можно использовать следующий оператор SQL:
Образец таблицы: заказчик
ВЫБРАТЬ МАКС. (Open_amt + receive_amt)
ОТ заказчика;
Выход:
МАКС (OPENING_AMT + RECEIVE_AMT) ---------------------------- 19000
Примечание: выходные данные указанного оператора SQL, показанного здесь, получены с помощью Oracle Database 10g Express Edition
.
Вот слайд-презентация всех агрегатных функций.
Практические упражнения SQL
Хотите улучшить статью выше? Публикуйте свои заметки / комментарии / примеры через Disqus.
Предыдущее: Среднее с округлением, сгруппировать по
Следующее: Макс с Группировать по, Сортировать по
SQL MAX Function
Резюме : в этом руководстве вы узнаете о функции SQL MAX , которая возвращает максимальное значение в наборе.
Введение в функцию SQL MAX
Функция MAX ()
возвращает максимальное значение в наборе.Функция MIN
не принимает в оценку значения NULL
. Ниже показано, как использовать функцию MAX ()
:
MAX (DISTINCT или ALL выражение) |
Модификатор ALL
указывает функции MAX
найти максимальное значение в все значения, включая дубликаты. Модификатор ALL
используется по умолчанию, поэтому вам не нужно указывать его явно.
Подобно функции MIN, модификатор DISTINCT
не применим к функции MAX ()
и предназначен только для совместимости с ISO.
Примеры функций SQL MAN
Мы будем использовать таблицу products
в образце базы данных для демонстрации.
Простая функция MAX использует
Чтобы найти самую высокую цену за единицу продукции, вы используете функцию MAX ()
в виде следующего запроса:
SELECT MAX (цена за единицу) FROM товары; |
Чтобы получить самые дорогие продукты, вам необходимо использовать следующий подзапрос:
SELECT productid, productname, unitprice FROM product unit ( WHER SELECT MAX (цена единицы) ИЗ товаров); |
Подзапрос возвращает наивысшую цену за единицу продукции.На основе максимальной цены внешний запрос выбирает данные о продукте, включая идентификатор продукта, название продукта и цену за единицу.
Функция SQL MAX с примером GROUP BY
Следующий запрос выбирает самую высокую цену за единицу продукта в каждой категории продукта:
SELECT categoryid, MAX (unitprice) FROM продуктов GROUP BY categoryid; |
Пункт GROUP BY
делит продукты по categoryid
на группы.Для каждой группы функция MAX ()
возвращает наивысшую цену за единицу.
Функция SQL MAX с предложением HAVING, пример
Чтобы получить категорию, у которой наивысшая цена за единицу превышает 100 долларов, вы можете объединить функцию MAX ()
с предложениями GROUP BY
и HAVING в виде следующего запроса:
SELECT categoryid, MAX (unitprice) AS maxprice ИЗ продуктов ГРУППА ПО categoryid ИМЕЕТ maxprice> 100; |
Обратите внимание, что псевдоним столбца используется в предложениях SELECT
и HAVING
.
В этом руководстве вы узнали, как использовать функцию SQL MAX
для поиска максимального значения в наборе.
- Было ли это руководство полезным?
- Да Нет
SQL — MAX () | Изучите SQL онлайн
Пред. След.
Функция SQL MAX () возвращает максимальное или самое большое значение столбца. Столбец должен быть числовым. Синтаксис функции SQL MAX () приведен ниже.
Синтаксис SQL для функции MAX ():
Синтаксис функции MAX () в SQL | ВЫБРАТЬ МАКС. (Имя_столбца) ИЗ имя_таблицы; |
Обратите внимание на следующую таблицу с несколькими записями, как указано ниже.
Имя таблицы (например): студент
Имена столбцов в этой таблице: Student_ID, Student_name, City и Marks
Доступные записи: 4 строки
Пример: как использовать функцию SQL MAX ():
Чтобы найти максимальные / самые высокие оценки из этой таблицы, выполните запрос ниже. Этот запрос найдет наибольшее значение среди всех значений из столбца «Отметки» и вернет наибольшее значение.
SQL-запрос:
ВЫБРАТЬ МАКС (баллы) от студента;
Вывод SQL-запроса:
95
Список других встроенных функций в SQL:
Щелкните по каждой функции SQL ниже, чтобы узнать о ней больше и просмотреть образцы SQL-запросов с выводом.
1. Агрегатные функции | |
СУММА () | Функция SQL SUM () возвращает сумму столбца. Столбец должен быть числовым. |
СЧЕТЧИК () | Функция SQL COUNT () возвращает / подсчитывает количество строк в запросе. Но он не будет подсчитывать нулевые значения / столбец. |
СРЕДНЕЕ () | Функция SQL AVG () возвращает среднее значение столбца. Столбец должен быть числовым. |
МИН. () | Функция SQL MIN () возвращает минимальное или наименьшее значение столбца. Столбец должен быть числовым. |
МАКС () | Функция SQL MAX () возвращает максимальное или самое большое значение столбца. Столбец должен быть числовым. |
ПЕРВЫЙ () | Функция SQL FIRST () возвращает первое значение заданного столбца. |
ПОСЛЕДНИЙ () | Функция SQL LAST () возвращает последнее значение заданного столбца. |
2. Скалярные функции | |
LEN () | Функция SQL LEN () возвращает общую длину заданного столбца. |
MID () | Функция SQL MID () извлекает символы из текстового поля. |
КРУГЛЫЙ () | Функция SQL ROUND () используется для округления числового значения до ближайшего целого числа или до числа десятичных знаков, указанного пользователем. |
LCASE () | Функция SQL LCASE () преобразует указанный столбец в нижний регистр. |
UCASE () | Функция SQL UCASE () преобразует указанный столбец в верхний регистр. |
СЕЙЧАС () | Функция SQL NOW () используется для возврата текущей даты и времени системы. |
ФОРМАТ () | Функция SQL FORMAT () используется для форматирования значения поля / столбца так, как оно должно отображаться на выходе. |
КОРЕНЬ () | Функция SQL SQRT () используется для нахождения значения квадратного корня из заданного числа. |
RAND () | Функция SQL RAND () используется для генерации случайных чисел. |
CONCAT () | Функция SQL CONCAT () используется для объединения 2 или более строк и формирования одной строки. |
3. Группировать по функциям | |
ГРУППА ПО () | Функция GROUP BY () используется вместе с оператором SELECT и агрегатными функциями (такими как SUM (), AVG (), MAX () и т. Д.) Для группировки похожих данных в наборе результатов по одному или нескольким столбцам. |
4. Имеющие функцию | |
Имея () | Функция HAVING () в SQL действует как фильтр, который используется для определения условий агрегатных функций в предложении WHERE. Основная цель функции HAVING () состоит в том, что агрегатные функции, такие как SUM (), COUNT (), AVG () и т. Д., Не могут использоваться в предложении where. Итак, они используются в предложении where с помощью функции HAVING (). |
Пред. След.
Нравится? Пожалуйста, поделитесь словом!
Могу ли я использовать MAX (COUNT ()) в SQL ?.Я наткнулся на интересный SQL… | автор: Quynh Nhu To Tuan
Я наткнулся на интересную задачу SQL, которая сначала выглядела простой, а затем оказалась немного сложнее, чем ожидалось.
И краткий ответ на поставленный выше вопрос: нет. Ты не можешь. Вложить агрегатные функции невозможно.
Итак, у меня есть список всех гостей, которые появлялись на DailyShow с 1999–2015 годов. Набор данных включает дату / год представления, имя гостя и его род занятий.
Вопрос:
Какая профессия гостя была самой популярной каждый год, когда Джон Стюарт проводил Daily Show?
Это схема таблицы:
Во-первых, давайте выясним наиболее распространенное занятие за ВСЕ годы:
Достаточно просто.Результат:
Пока все хорошо. Итак, как мы можем получить этот результат по годам?
Для начала давайте посчитаем количество занятий по годам для каждой профессии:
Результатом будет количество занятий для каждой профессии за каждый год:
Теперь, как мы можем ограничить эти результаты для каждого года наивысшим числом занятий?
Мы ожидаем использовать MAX для COUNT (род занятий) и добавить год в GROUP BY. Примерно так:
Угу.
Хм, еще одна попытка — использовать предложение WHERE:
Нет.
Итак, как мы можем найти альтернативу MAX (COUNT ()), о которой мы мечтаем?
Решение состоит в том, чтобы использовать первую таблицу в качестве подзапроса. Мы создадим дополнительный запрос, внешний запрос, который использует первую таблицу в своем предложении FROM. Он сможет использовать MAX () для результата COUNT () из первой таблицы, таким образом избегая прямого использования двухуровневых агрегатных функций.
1. / Внутренний запрос> Напоминание, вот как это выглядело:
2. / Внешний запрос> Теперь мы создаем АЛИАС «счет_работы» для столбца COUNT (оккупация) во внутреннем запросе, чтобы мы могли ссылаться на него из внешнего запроса.
И вуаля, вот и все:
Проблема заключалась в том, что в операторе SELECT нельзя использовать две агрегатные функции. Решение состоит в том, чтобы создать таблицу, чтобы сначала получить результаты от внутренней функции, а затем использовать эту таблицу для вызова второй функции в соответствующем столбце.
3.6.4 Строки, содержащие групповой максимум определенного столбца
3.6.4 Строки, содержащие групповой максимум определенного столбца
Задача: Для каждого товара найти дилера или дилеров
по самой дорогой цене.
Эту проблему можно решить с помощью такого подзапроса:
ВЫБРАТЬ артикул, дилер, цена.
ИЗ магазина s1
ГДЕ цена = (ВЫБЕРИТЕ МАКС. (S2.price)
ИЗ магазина s2
ГДЕ s1.article = s2.article)
ЗАКАЗАТЬ ПО артикулам;
+ --------- + -------- + ------- +
| статья | дилер | цена |
+ --------- + -------- + ------- +
| 0001 | B | 3.99 |
| 0002 | А | 10,99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+ --------- + -------- + ------- +
В предыдущем примере используется коррелированный подзапрос, который может быть
неэффективно (см. раздел 13.2.11.7, «Коррелированные подзапросы»). Другой
Возможности решения проблемы заключаются в использовании некоррелированного
подзапрос в предложении FROM
, LEFT
, или обычное табличное выражение с окном
JOIN
функция.
Некоррелированный подзапрос:
ВЫБРАТЬ s1.article, дилер, s1.price
ИЗ магазина s1
ПРИСОЕДИНИТЬСЯ (
ВЫБЕРИТЕ артикул, МАКС. (Цена) КАК цена
ИЗ магазина
ГРУППА ПО СТАТЬЯМ) КАК s2
НА s1.article = s2.article И s1.price = s2.price
ЗАКАЗАТЬ ПО артикулам;
ЛЕВОЕ СОЕДИНЕНИЕ
:
ВЫБРАТЬ s1.article, s1.dealer, s1.price
ИЗ магазина s1
СЛЕВА ПРИСОЕДИНЯЙТЕСЬ к магазину s2 НА s1.article = s2.article И s1.price
LEFT JOIN
работает на том основании, что когда
с1.цена
максимальное значение, нет
s2.price
с большей стоимостью и, следовательно,
соответствующий s2.стоимость статьи
составляет
НЕТ
. См. Раздел 13.2.10.2, «Предложение JOIN».
Общее табличное выражение с оконной функцией:
С s1 AS (
ВЫБЕРИТЕ артикул, дилера, цену,
RANK () OVER (РАЗДЕЛЕНИЕ ПО СТАТЬЯМ
ЗАКАЗАТЬ ПО ЦЕНЕ УДАЛЕНИЕ
) AS `Rank`
ИЗ магазина
)
ВЫБЕРИТЕ артикул, дилера, цену
ОТ s1
ГДЕ `Rank` = 1
ЗАКАЗАТЬ ПО артикулам;
Как получить максимальное значение в SQL Server
Вы можете найти максимальное значение в SQL Server, используя:
ВЫБРАТЬ max (field_name) как new_field_name ОТ [имя_базы_данных].[table_schema]. [table_name]
Далее вы увидите, как найти максимальное значение в следующих трех сценариях:
- в одном поле
- после объединения таблиц
- Использование группы по
(1) Найдите максимальное значение в одном поле в SQL Server
Чтобы начать с простого примера, давайте создадим таблицу с именем ' PersonAge ' (со схемой dbo):
Затем вы можете найти максимальный возраст, выполнив следующий запрос (где имя базы данных это TestDatabase):
ВЫБРАТЬ max (Возраст) как Max_Age ИЗ [TestDatabase].[dbo]. [PersonAge]
Как видите, максимальный возраст 65:
(2) Найдите максимальное значение после объединения таблиц в SQL Server
Давайте добавим вторую таблицу под названием « People » (со схемой dbo):
Затем таблицу People можно присоединить к таблице PersonAge с помощью поля Age_ID (которое находится под обеими таблицами):
ВЫБРАТЬ пр.First_Name, пр.Последнее_имя, возраст ИЗ [TestDatabase].[dbo]. [People] pr LEFT JOIN [TestDatabase]. [Dbo]. [PersonAge] ag ON pr.Age_ID = ag.Age_ID
Вот результаты объединенных таблиц:
Предположим, вы хотите найти максимальный возраст после объединения таблиц. В этом случае вам нужно будет добавить следующее предложение WHERE внизу запроса:
WHERE ag.Age = (SELECT max (Age) FROM [TestDatabase]. [Dbo]. [PersonAge])
Таким образом, полный запрос будет выглядеть следующим образом:
ВЫБРАТЬ пр.Имя, пр.Последнее_имя, возраст ОТ [TestDatabase]. [Dbo]. [People] pr LEFT JOIN [TestDatabase]. [Dbo]. [PersonAge] ag ON pr.Age_ID = ag.Age_ID WHERE ag.Age = (ВЫБЕРИТЕ max (Возраст) FROM [TestDatabase]. [Dbo]. [PersonAge])
Затем вы получите полную запись с максимальным возрастом 65:
(3) Применить группу по
Наконец, приведенный ниже запрос можно использовать для получения « Город » и « Возраст ». 'поля:
ВЫБРАТЬ пр.Город, возраст ОТ [TestDatabase]. [Dbo]. [People] pr LEFT JOIN [TestDatabase]. [Dbo]. [PersonAge] ag ON pr.Age_ID = ag.Age_ID
Вот результат:
Что, если вы хотите узнать максимальный возраст для каждого города?
В этом случае вам нужно будет добавить GROUP BY pr.City внизу запроса:
ВЫБРАТЬ пр. Город, max (ag.Age) как Max_Age ОТ [TestDatabase]. [Dbo]. [People] pr LEFT JOIN [TestDatabase]. [Dbo].[PersonAge] ag ON pr.Age_ID = ag.Age_ID ГРУППА ПО ПРОЖИВАНИЮ ГОРОДА
Теперь вы получите максимальный возраст для города:
Если вам было интересно узнать максимальный возраст для определенного города, вы можете указать название города в предложении WHERE.
Например, вы хотите найти максимальный возраст для Лондон. В этом случае вам нужно будет добавить следующее предложение WHERE:
ГДЕ pr.City = 'Лондон'
Итак, полный запрос для определения максимального возраста для Лондона:
.