Resumo : neste tutorial, você aprenderá como usar a FIRST_VALUE()
função MySQL para obter a primeira linha de um quadro, partição ou conjunto de resultados.
Introdução à função MySQL FIRST_VALUE()
É FIRST_VALUE()
uma função de janela que permite selecionar a primeira linha de um quadro de janela, partição ou conjunto de resultados.
O seguinte ilustra a sintaxe da FIRST_VALUE()
função:
FIRST_VALUE (expression) OVER (
[partition_clause]
[order_clause]
[frame_clause]
)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
expressão
A FIRST_VALUE()
função retorna o valor da expression
primeira linha do quadro da janela.
A OVER
cláusula consiste em três cláusulas: partition_clause
, order_clause
, e frame_clause
.
cláusula_partição
A partition_clause
cláusula divide as linhas dos conjuntos de resultados em partições às quais a função se aplica independentemente. O partition_clause
tem a seguinte sintaxe:
PARTITION BY expr1, expr2, ...
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
cláusula_pedido
A order_clause
cláusula especifica a ordem lógica das linhas em cada partição na qual a FIRST_VALUE()
função opera. O seguinte mostra a sintaxe do order_clause
:
ORDER BY expr1 [ASC|DESC], expr2 [ASC|DESC], ...
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
cláusula_frame
Define frame_clause
o subconjunto (ou quadro) da partição atual. Para obter informações detalhadas sobre a sintaxe da cláusula frame, consulte o tutorial de funções de janela .
Exemplos de funções MySQL FIRST_VALUE()
As instruções a seguir criam uma nova tabela chamada overtime
e inserem dados de amostra para demonstração:
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('Diane Murphy','Accounting',37),
('Mary Patterson','Accounting',74),
('Jeff Firrelli','Accounting',40),
('William Patterson','Finance',58),
('Gerard Bondur','Finance',47),
('Anthony Bow','Finance',66),
('Leslie Jennings','IT',90),
('Leslie Thompson','IT',88),
('Julie Firrelli','Sales',81),
('Steve Patterson','Sales',29),
('Foon Yue Tseng','Sales',65),
('George Vanauf','Marketing',89),
('Loui Bondur','Marketing',49),
('Gerard Hernandez','Marketing',66),
('Pamela Castillo','SCM',96),
('Larry Bott','SCM',100),
('Barry Jones','SCM',65);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
1) Usando FIRST_VALUE()
a função MySQL em todo o exemplo do conjunto de resultados da consulta
A declaração a seguir obtém o nome do funcionário, as horas extras e o funcionário que tem menos horas extras:
SELECT
employee_name,
hours,
FIRST_VALUE(employee_name) OVER (
ORDER BY hours
) least_over_time
FROM
overtime;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Neste exemplo, a ORDER BY
cláusula ordenou as linhas do conjunto de resultados por horas e FIRST_VALUE()
selecionou a primeira linha indicando o funcionário que teve menos horas extras.
2) Usando a função MySQL FIRST_VALUE() com exemplo de partições
A seguinte afirmação encontra o funcionário que tem menos horas extras em todos os departamentos:
SELECT
employee_name,
department,
hours,
FIRST_VALUE(employee_name) OVER (
PARTITION BY department
ORDER BY hours
) least_over_time
FROM
overtime;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A saída é:
Neste exemplo:
- Primeiro, a
PARTITION BY
cláusula divide os funcionários em partições por departamentos. Ou seja, cada partição é composta por funcionários que pertencem ao mesmo departamento. - Segundo, a
ORDER BY
cláusula especifica a ordem das linhas em cada partição. - Terceiro,
FIRST_VALUE()
opera em cada partição classificada por horas. Ele retorna a primeira linha de cada partição que é o funcionário que tem menos horas extras no departamento.
Resumo
- Use a função MySQL
FIRST_VALUE()
para obter a primeira linha de um quadro de janela.