Описание: в этой статье вы узнаете, как использовать функцию FIRST_VALUE() в MySQL для получения первой строки фрейма, раздела или набора результатов.
Обзор функции FIRST_VALUE()
FIRST_VALUE() — это функция окна , что позволяет выбрать первую строку оконной рамы, перегородки или результирующего набора.
Следующее иллюстрирует синтаксис функции FIRST_VALUE():
FIRST_VALUE(expression) OVER ( [partition_clause] [order_clause] [frame_clause] )
В этом синтаксисе:
expression
Функция FIRST_VALUE() возвращает значение из expression из первой строки оконного фрейма.
Предложение OVER состоит из трех положений: partition_clause, order_clause и frame_clause.
partition_clause
Предложение partition_clause разделяет строки наборов результатов на разделы, к которым функция применяется независимо. partition_clause имеет следующий синтаксис:
PARTITION BY expr1, expr2, ...
order_clause
Предложение order_clause определяет логический порядок строк в каждом разделе, в котором работает функция FIRST_VALUE(). Ниже показан синтаксис order_clause:
ORDER BY expr1 [ASC|DESC], expr2 [ASC|DESC], ...
frame_clause
frame_clause определяет подмножество (или фрейм) текущего раздела. Для получения подробной информации о синтаксисе предложения frame, посмотрите его в руководстве по оконным функциям.
Примеры функций FIRST_VALUE() в MySQL
Следующие операторы создают новую таблицу с именем overtime и вставляют образцы данных для демонстрации:
CREATE TABLE overtime ( employee_name VARCHAR(50) NOT NULL, department VARCHAR(50) NOT NULL, hours INT NOT NULL, PRIMARY KEY (employee_name , department) ); INSERT INTO overtime(employee_name, department, hours) VALUES('Alex A','Accounting',45), ('Destroyer D','Finance',33), ('AndreyEx A','IT',95), ('Maria M','Marketing',87);
1) Использование функции FIRST_VALUE() в MySQL на примере всего набора результатов запроса
Следующий оператор получает имя сотрудника, сверхурочную работу и сотрудника, который имеет наименьшее количество сверхурочной работы:
SELECT employee_name, hours, FIRST_VALUE(employee_name) OVER ( ORDER BY hours ) least_over_time FROM overtime;
В этом примере предложение ORDER BY упорядочило строки в наборе результатов по часам, а FIRST_VALUE() выбрала первую строку, указав сотрудника, у которого было меньше всего сверхурочных.
2) Использование FIRST_VALUE() в MySQL над примером раздела
Следующее утверждение находит сотрудника, который имеет наименьшее количество сверхурочных в каждом отделе:
SELECT employee_name, department, hours, FIRST_VALUE(employee_name) OVER ( PARTITION BY department ORDER BY hours ) least_over_time FROM overtime;
В этом примере:
- Во-первых, предложение PARTITION BY поделил сотрудников на подразделения по отделам. Другими словами, каждый раздел состоит из сотрудников, принадлежащих к одному отделу.
- Во-вторых, в предложении ORDER BY указаны порядки строк в каждом разделе.
- В-третьих, каждый раздел работает по часам. FIRST_VALUE() возвратила первую строку в каждом разделе, который является сотрудником, который имеет наименьшее количество сверхурочного времени в отделе.
В этой статьи вы узнали, как использовать функцию FIRST_VALUE() в MySQL для получения первой строки оконного фрейма.