Desafio SQL: Calculando o Erro na Média Salarial

26/11/2024

Neste post, vamos resolver um desafio interessante de SQL onde precisamos calcular a diferença entre a média salarial real e uma média calculada incorretamente devido a um erro de digitação. Esse problema é ótimo para quem deseja praticar manipulação de strings, cálculos e funções de agregação em SQL. Vamos ao desafio!


O Enunciado do Problema

Samantha foi encarregada de calcular a média salarial mensal de todos os funcionários na tabela Employees. No entanto, ela não percebeu que a tecla "0" do seu teclado estava quebrada, e acabou calculando a média salarial removendo todos os zeros dos valores salariais.

Nosso objetivo é escrever uma consulta SQL para calcular o erro absoluto entre a média salarial real e a média salarial calculada incorretamente, arredondando o resultado para o inteiro mais próximo.


Estrutura da Tabela

A tabela Employees tem a seguinte estrutura:

ColunaTipo
IDInteger
NameString
SalaryInteger

Exemplo de Entrada

IDNameSalary
1Kristeen1420
2Ashley2006
3Julia2210
4Maria3000

Cálculo Explicado

1. Média Salarial Real

A média real é calculada como:

2. Média Salarial Calculada Incorretamente

Samantha removeu todos os zeros dos salários:

IDSalary OriginalSalary Modificado
11420142
2200626
32210221
430003

A média calculada com os salários modificados é:

3. Erro Absoluto

A diferença entre as médias é:


A Solução em SQL

A consulta SQL para resolver este problema é:


  1. SELECT CEIL(ABS(AVG(Salary) - AVG(CAST(REPLACE(Salary, '0'''AS UNSIGNED))))  
  2. FROM Employees;  

Explicação da Consulta

  1. AVG(Salary): Calcula a média salarial real.

  2. REPLACE(Salary, '0', ''): Remove todos os zeros dos salários.

  3. CAST(... AS UNSIGNED): Converte o resultado sem zeros para um número.

  4. AVG(...): Calcula a média dos salários modificados.

  5. ABS(...): Calcula o valor absoluto da diferença entre as duas médias.

  6. CEIL(...): Arredonda o resultado para o inteiro mais próximo.


Exemplo de Saída

Com base no exemplo fornecido, a consulta retorna:

2061

Aprendizados

Este desafio mostra como:

  • Manipular strings com a função REPLACE.

  • Usar CAST para conversões de tipos.

  • Trabalhar com funções de agregação como AVG.

  • Calcular diferenças e erros com ABS e arredondar com CEIL.