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.