Desafio SQL: Determinando o Maior Salário Total

26/11/2024

Desafio SQL: Determinando o Maior Salário Total

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!


O Enunciado do Problema

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:

  1. Encontre o maior ganho total entre todos os funcionários.

  2. 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.


Estrutura da Tabela

A tabela Employee tem a seguinte estrutura:

ColunaTipo
employee_idInteger
nameString
monthsInteger
salaryInteger

Exemplo de Entrada

employee_idnamemonthssalary
12228Rose151968
33645Angela13443
45692Frank171608
56118Patrick71345
59725Lisa112330
74197Kimberly164372
78454Bonnie81771
83565Michael62017
98607Todd53396

Análise do Problema

  1. Primeiro, precisamos calcular o ganho total (salary * months) para cada funcionário.

  2. Depois, identificamos o maior valor entre esses ganhos totais.

  3. Por fim, contamos quantos funcionários possuem esse maior ganho total.


A Solução em SQL

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);

Explicação da Consulta

  1. SELECT salary * months AS total_earnings:

    • Calculamos o ganho total de cada funcionário multiplicando seu salário pelos meses trabalhados.

  2. MAX(total_earnings):

    • Determina o maior valor de ganho total.

  3. COUNT(*):

    • Conta quantos registros possuem o maior ganho total.

  4. WHERE total_earnings = (SELECT MAX(salary * months) FROM Employee):

    • Filtra apenas os ganhos totais que correspondem ao maior valor.

  5. Subconsulta SELECT MAX(salary * months):

    • Identifica o maior ganho total da tabela Employee.

  6. Tabela Derivada TotalEarnings:

    • Usamos uma tabela derivada para facilitar o cálculo e a manipulação dos dados.


Exemplo de Saída

Com os dados fornecidos, a consulta retorna:

69952 1

Interpretação da Saída

  • O maior ganho total é 69952.

  • Apenas 1 funcionário (Kimberly) alcançou esse ganho total.


Por que essa Consulta Funciona?

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.