26/11/2024
Neste post, exploraremos um desafio interessante envolvendo SQL, onde é necessário calcular o maior ganho total de um funcionário e contar quantos funcionários alcançaram esse ganho. Este problema é ótimo para praticar manipulação de agregados e subconsultas em SQL. Vamos ao desafio!
Definimos o ganho total de um funcionário como o produto do seu salário mensal e o número de meses trabalhados: salário * meses
. Nosso objetivo é escrever uma consulta SQL que:
Encontre o maior ganho total entre todos os funcionários.
Conte quantos funcionários alcançaram esse maior ganho total.
A saída deve ser exibida como dois valores separados por espaço: o maior ganho total e o número de funcionários que alcançaram esse valor.
A tabela Employee
tem a seguinte estrutura:
Coluna | Tipo |
---|---|
employee_id | Integer |
name | String |
months | Integer |
salary | Integer |
employee_id | name | months | salary |
12228 | Rose | 15 | 1968 |
33645 | Angela | 1 | 3443 |
45692 | Frank | 17 | 1608 |
56118 | Patrick | 7 | 1345 |
59725 | Lisa | 11 | 2330 |
74197 | Kimberly | 16 | 4372 |
78454 | Bonnie | 8 | 1771 |
83565 | Michael | 6 | 2017 |
98607 | Todd | 5 | 3396 |
Primeiro, precisamos calcular o ganho total (salary * months
) para cada funcionário.
Depois, identificamos o maior valor entre esses ganhos totais.
Por fim, contamos quantos funcionários possuem esse maior ganho total.
A consulta SQL para resolver este problema é:
SELECT
MAX(total_earnings) AS max_earnings,
COUNT(*) AS employee_count
FROM (
SELECT salary * months AS total_earnings
FROM Employee
) AS TotalEarnings
WHERE total_earnings = (SELECT MAX(salary * months) FROM Employee);
SELECT salary * months AS total_earnings
:
Calculamos o ganho total de cada funcionário multiplicando seu salário pelos meses trabalhados.
MAX(total_earnings)
:
Determina o maior valor de ganho total.
COUNT(*)
:
Conta quantos registros possuem o maior ganho total.
WHERE total_earnings = (SELECT MAX(salary * months) FROM Employee)
:
Filtra apenas os ganhos totais que correspondem ao maior valor.
Subconsulta SELECT MAX(salary * months)
:
Identifica o maior ganho total da tabela Employee
.
Tabela Derivada TotalEarnings
:
Usamos uma tabela derivada para facilitar o cálculo e a manipulação dos dados.
Com os dados fornecidos, a consulta retorna:
69952 1
O maior ganho total é 69952
.
Apenas 1 funcionário (Kimberly) alcançou esse ganho total.
A combinação de uma tabela derivada para calcular os ganhos totais e o uso de funções agregadas como MAX
e COUNT
torna a consulta eficiente e clara. A subconsulta garante que apenas os registros relevantes sejam considerados na contagem.