Resumo : neste tutorial, você aprenderá como usar a NTH_VALUE()
função para obter um valor da enésima linha em um conjunto de resultados.
Introdução à função MySQL NTH_VALUE()
É NTH_VALUE()
uma função de janela que permite obter um valor da enésima linha em um conjunto ordenado de linhas.
O seguinte mostra a sintaxe da NTH_VALUE()
função:
NTH_VALUE(expression, N)
FROM FIRST
OVER (
partition_clause
order_clause
frame_clause
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A NTH_VALUE()
função retorna o valor da expression
enésima linha do quadro da janela. Se essa enésima linha não existir, a função retornará NULL
. N deve ser um número inteiro positivo, por exemplo, 1, 2 e 3.
O FROM FIRST
instrui a NTH_VALUE()
função a iniciar o cálculo na primeira linha da moldura da janela.
Observe que o padrão SQL oferece suporte FROM FIRST
a e FROM LAST
. No entanto, o MySQL suporta apenas FROM FIRST
. Se quiser simular o efeito de FROM LAST
, você pode usar ORDER BY
in over_clause
para classificar o conjunto de resultados na ordem inversa.
Exemplos de funções MySQL NTH_VALUE()
Criaremos uma nova tabela com o nome basic_pay
da demonstração.
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),
('Gerard Bondur','Accounting',11472),
('Anthony Bow','Accounting',6627),
('Leslie Jennings','IT',8113),
('Leslie Thompson','IT',5186),
('Julie Firrelli','Sales',9181),
('Steve Patterson','Sales',9441),
('Foon Yue Tseng','Sales',6660),
('George Vanauf','Sales',10563),
('Loui Bondur','SCM',10449),
('Gerard Hernandez','SCM',6949),
('Pamela Castillo','SCM',11303),
('Larry Bott','SCM',11798),
('Barry Jones','SCM',10586);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
1) Usando a função MySQL NTH_VALUE() sobre o conjunto de resultados
A instrução a seguir usa a NTH_VALUE()
função para encontrar o funcionário que tem o segundo salário mais alto:
SELECT
employee_name,
salary,
NTH_VALUE(employee_name, 2) OVER (
ORDER BY salary DESC
) second_highest_salary
FROM
basic_pays;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
2) Usando MySQL NTH_VALUE() sobre exemplo de partições
A consulta a seguir localiza o funcionário que tem o segundo salário mais alto em cada departamento:
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;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Nesta consulta adicionamos a PARTITION BY
cláusula de divisão dos funcionários por departamento. Em seguida, a NTH_VALUE()
função é aplicada a cada partição de forma independente.
Resumo
- Use a função MySQL
NTH_VALUE()
para obter um valor da enésima linha de um conjunto de resultados.