MAX ФУНКЦИЯ

В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию MAX с синтаксисом и примерами.

Описание

Oracle/PLSQL функция MAX возвращает максимальное значение выражения.

Синтаксис

Синтаксис Oracle/PLSQL функции MAX:

SELECT MAX(aggregate_expression)
FROM tables
[WHERE conditions];

ИЛИ синтаксис для функции MAX с группировкой результатов по одному или нескольким столбцам:

SELECT expression1, expression2, … expression_n,
MAX(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;

Параметры или аргументы

expression1, expression2, … expression_n — выражения, которые не инкапсулированы в функцию MAX и должны быть включены в оператор GROUP BY в конце SQL преложения.

aggregate_expression — это столбец или выражение, из которого будет возвращено максимальное значение.

tables — таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.

WHERE conditions — необязательный. Это условия, которые должны быть соблюдены для выбранных записей.

Применение

Функцию MAX можно использовать в следующих версиях Oracle/PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Пример с единичным полем

Рассмотрим несколько примеров функции MAX и изучим, как использовать функцию MAX в Oracle/PLSQL.
Например, вы, возможно, пожелает узнать, какая максимальная зарплата всех employees (сотрудников).

В этом примере функции MAX, выражение MAX(salary) представлено под псевдоним «Highest Salary». В результате, «Highest Salary» будет отображаться как имя поля, когда возвратится результирующий набор.

Пример — использование GROUP BY

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

Поскольку в вашем операторе SELECT указан один столбец, который не инкапсулирован в функции MAX, то вы должны использовать оператор GROUP BY. Поэтому поле department (отдел) должно быть указано в операторе GROUP BY.

Вопросы и ответы

Вопрос:

Я пытаюсь вытащить некоторую информацию из таблицы. Для простоты, скажем таблица (report_history) имеет 4 колонки: user_name, report_job_id, report_name и report_run_date.

Каждый раз, когда выполняется отчет в Oracle, запись фиксируется в таблице, отмечая вышеперечисленную информацию. То, что я пытаюсь сделать, это вытащить из этой таблицы, когда и кем был запущен последний отдельный отчет.

Мой первоначальный запрос:

работает нормально. Тем не менее, это не дает имя пользователя, запустившего отчет.

Добавление user_name к списку выборки и к оператору GROUP BY возвращает несколько строк для каждого отчета; результаты показывают последнее время, когда каждый человек запускал каждый отчет остается вопросом. (т.е. User1 запускал ОТЧЕТ1 01-Июль-14, User2 запускал ОТЧЕТ1 01-АВГ-14). Я не хочу этого … Я просто хочу знать, кто запускал определенный отчет и когда последний раз он был запущен.

Есть предложения?

Ответ:

Это все становится немного сложнее. В запросе ниже SQL SELECT вернет результаты, которые вы хотите:

Во-первых, мы присвоим псевдоним rh первому экземпляру таблицы report_history.
Во-вторых, мы включили два компонента в оператор FROM. Первый из них является таблица report_history (псевдоним RH). Второй является подзапрос с псевдонимом maxresults:

Имеем псевдоним MAX(report_run_date) как maxdate и имеем псевдоним всего результирующего набора как maxresults.

Теперь, когда мы составили этот запрос в пределах нашего FROM, Oracle позволит нам объединить эти результаты нашей исходной таблицы report_history. Таким образом, мы объединили поля report_name и report_run_date таблицы с псевдонимами rh и maxresults. Это позволили нам получить report_name, MAX(report_run_date), а также user_name.