Описание: в этой статье вы узнаете, как использовать функцию FIRST_VALUE() в MySQL для получения первой строки фрейма, раздела или набора результатов.
FIRST_VALUE() – это функция окна , что позволяет выбрать первую строку оконной рамы, перегородки или результирующего набора.
Следующее иллюстрирует синтаксис функции FIRST_VALUE():
FIRST_VALUE(expression) OVER ( [partition_clause] [order_clause] [frame_clause] )
В этом синтаксисе:
Функция FIRST_VALUE() возвращает значение из expression из первой строки оконного фрейма.
Предложение OVER состоит из трех положений: partition_clause, order_clause и frame_clause.
Предложение partition_clause разделяет строки наборов результатов на разделы, к которым функция применяется независимо. partition_clause имеет следующий синтаксис:
PARTITION BY expr1, expr2, ...
Предложение order_clause определяет логический порядок строк в каждом разделе, в котором работает функция FIRST_VALUE(). Ниже показан синтаксис order_clause:
ORDER BY expr1 [ASC|DESC], expr2 [ASC|DESC], ...
frame_clause определяет подмножество (или фрейм) текущего раздела. Для получения подробной информации о синтаксисе предложения frame, посмотрите его в руководстве по оконным функциям.
Следующие операторы создают новую таблицу с именем 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);
Следующий оператор получает имя сотрудника, сверхурочную работу и сотрудника, который имеет наименьшее количество сверхурочной работы:
SELECT employee_name, hours, FIRST_VALUE(employee_name) OVER ( ORDER BY hours ) least_over_time FROM overtime;
В этом примере предложение ORDER BY упорядочило строки в наборе результатов по часам, а FIRST_VALUE() выбрала первую строку, указав сотрудника, у которого было меньше всего сверхурочных.
Следующее утверждение находит сотрудника, который имеет наименьшее количество сверхурочных в каждом отделе:
SELECT employee_name, department, hours, FIRST_VALUE(employee_name) OVER ( PARTITION BY department ORDER BY hours ) least_over_time FROM overtime;
В этом примере:
В этой статьи вы узнали, как использовать функцию FIRST_VALUE() в MySQL для получения первой строки оконного фрейма.