Резюме : в этой статье вы узнаете, как использовать функцию NTH_VALUE() для получения значения из N-й строки в наборе результатов.
NTH_VALUE() — оконная функция, что позволяет получить значение из N — го ряда в упорядоченный набор строк.
Ниже показан синтаксис функции NTH_VALUE():
NTH_VALUE(expression, N) FROM FIRST OVER ( partition_clause order_clause frame_clause )
Функция NTH_VALUE() возвращает значение expression из N — го ряда. Если эта N-ая строка не существует, функция возвращает NULL. N должно быть положительным целым числом, например, 1, 2 и 3.
FROM FIRST Инструктирует функцию NTH_VALUE() начать вычисление в первой строке.
Обратите внимание, что стандарт SQL поддерживает как FROM FIRST и FROM LAST. Тем не менее, MySQL поддерживает только FROM FIRST. Если вы хотите смоделировать эффект FROM LAST, вы можете использовать ORDER BY в over_clause, чтобы отсортировать набор результатов в обратном порядке.
Мы создадим новую таблицу с именем basic_pay для демонстрации.
CREATE TABLE basic_pays( employee_name VARCHAR(50) NOT NULL, department VARCHAR(50) NOT NULL, salary INT NOT NULL, PRIMARY KEY (employee_name , department) ); INSERT INTO basic_pays(employee_name, department, salary) VALUES ('Diane Murphy','Accounting',8435), ('Mary Patterson','Accounting',9998), ('Jeff Firrelli','Accounting',8992), ('William Patterson','Accounting',8870), ('Larry Bott','SCM',11798), ('Barry Jones','SCM',10586);
В следующем утверждении функция NTH_VALUE() используется для поиска сотрудника со вторым по величине окладом:
SELECT employee_name, salary, NTH_VALUE(employee_name, 2) OVER ( ORDER BY salary DESC ) second_highest_salary FROM basic_pays;
Следующий запрос находит сотрудника, который занимает второе место по зарплате в каждом отделе:
SELECT employee_name, department, salary, NTH_VALUE(employee_name, 2) OVER ( PARTITION BY department ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) second_highest_salary FROM basic_pays;
В этом запросе мы добавили PARTITION BY для разделения сотрудников по отделам. Затем функция NTH_VALUE() применяется к каждому разделу независимо.
В этой статье вы узнали, как использовать функцию NTH_VALUE() MySQL для получения значения из N-й строки набора результатов.