Поиск по сайту:
Время есть величайший из новаторов (Ф. Бэкон).

Функция NTH_VALUE в MySQL

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (4 оценок, среднее: 5,00 из 5)
Загрузка...
21.10.2019
MySQL. Математические функции

Резюме : в этой статье вы узнаете, как использовать функцию 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, чтобы отсортировать набор результатов в обратном порядке.

 

Примеры функции NTH_VALUE() в MySQL

Мы создадим новую таблицу с именем  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() в MySQL над набором результатов

В следующем утверждении функция NTH_VALUE() используется для поиска сотрудника со вторым по величине окладом:

SELECT
employee_name,
salary,
NTH_VALUE(employee_name, 2) OVER  (
ORDER BY salary DESC
) second_highest_salary
FROM
basic_pays;

 

Пример использования NTH_VALUE() над разделом

Следующий запрос находит сотрудника, который занимает второе место по зарплате в каждом отделе:

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-й строки набора результатов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.