Função MySQL NTH_VALUE

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 expressionené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 FIRSTinstrui 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 FIRSTa e FROM LAST. No entanto, o MySQL suporta apenas FROM FIRST. Se quiser simular o efeito de FROM LAST, você pode usar ORDER BYin over_clausepara classificar o conjunto de resultados na ordem inversa.

Exemplos de funções MySQL NTH_VALUE()

Criaremos uma nova tabela com o nome  basic_payda 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:

Exemplo de função MySQL NTH_VALUE

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:

Exemplo de partição MySQL NTH_VALUE Function OVER

Nesta consulta adicionamos a PARTITION BYclá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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *