Voltar para a lista de artigos Artigos
7 minutos de leitura

Quem tem o mais alto salário, em termos de Departamento? Use SQL para Descobrir!

Este artigo mostra como obter o salário total por departamento para uma organização, usando a funcionalidade GROUP BY do SQL. Explicamos em detalhes a cláusula SQL GROUP BY junto com a filtragem condicional usando uma cláusula HAVING.

A compreensão do gasto salarial para uma organização é um dos pontos de partida comuns para os líderes empresariais. Ele os ajuda a ver quem na organização tem o maior custo salarial total, em termos de departamento. Você também pode querer ver a distribuição dos pagamentos salariais para ter uma melhor noção da alocação de custos.

Neste artigo, vou ilustrar como você pode usar o SQL GROUP BY para conseguir isto. Se você é um profissional que pode usar tal análise, ou se você é um estudante tentando entender a funcionalidade do SQL GROUP BY através de um caso de uso prático, continue lendo!

Antes de resolvermos o problema, vamos dar uma olhada no conjunto de dados que vamos utilizar.

A amostra do conjunto de dados

employees:

employeenumberlastnamelevelannual_salarydepartment
1056Patterson1010000Finance
1076Firrel57000Marketing
1088Patterson1012500Finance
1102Bondur25000Human Resources
1143Bow25000Sales
1165Jennings25000Sales
1166Thompson1010000Marketing

Dado acima é o employees tabela com cinco colunas, com nomes de colunas auto-explicativas.

  • employeenumber: Identificador único para o funcionário.
  • lastname: Sobrenome do funcionário.
  • level: O nível do empregado na hierarquia.
  • annual_salary: Remuneração anual para o empregado.
  • department: O departamento do funcionário.

Agora, digamos que você queira encontrar o salário anual total dado aos funcionários pertencentes a diferentes departamentos, como finanças, marketing, recursos humanos e vendas. Este tipo de operação de dados é conhecido como agregação.

O que é agregação?

Como é difícil analisar cada linha separadamente, especialmente com grandes conjuntos de dados, muitas vezes é útil agrupar dados semelhantes para entender algumas estatísticas para cada um desses grupos. Isto é conhecido como agregação.

Você pode querer agrupar vários segmentos de clientes (agregando por segmento de cliente), calcular seu tamanho médio de pedido, calcular o total de vendas por região (agregando por geografia), ou verificar o número total de itens por vários vendedores em um website (agregando por vendedor). Todos estes são exemplos de agregação de dados que podem ajudar na análise dos dados e na geração de insights.

Portanto, aqui, queremos agregar os funcionários por departamento, depois calcular o salário total (ou seja, a soma dos salários) para todos os funcionários pertencentes a esse departamento.

Você pode pensar que pode fazer isso facilmente para a tabela acima, somando os salários à mão. Mas você certamente precisará de uma maneira mais rápida se você tiver milhares de funcionários! É aqui que a cláusula SQL GROUP BY pode lhe ajudar.

O GRUPO SQL POR Cláusula

A cláusula SQL GROUP BY ajuda a agregar os dados em grupos e depois calcular as estatísticas relacionadas para esse grupo.

Para nosso caso, você pode usar a seguinte consulta para calcular o salário total por departamento. Os comentários explicam brevemente a função de cada construção na consulta.

Consulta:

SELECT department,                        -- column to be returned
SUM(annual_salary)                        -- aggregate function
FROM employees                            -- table name
GROUP BY department;                      -- column to use for grouping

Saída:

departmentSUM(annual_salary)
Finance22500
Marketing17000
Sales10000
Human Resources5000

Para ajudá-lo a entender melhor isto, deixe-me mergulhar um pouco mais na estrutura desta consulta e explicar cada cláusula ou palavra-chave utilizada.

Exemplo de estrutura de uma consulta com uma cláusula "GROUP BY

Se eu desenhasse um esqueleto ou uma estrutura de amostra de uma consulta SQL que usa uma cláusula GROUP BY, ela seria algo parecido com isto. Você pode não usar todas as construções o tempo todo, mas é útil compreendê-las.

Estrutura de amostra:

SELECT <columns>, <aggregate function>
FROM <table name>
WHERE <conditions>
GROUP BY <columns>
HAVING <aggregate condition>
ORDER BY <columns>

Em nossa consulta para encontrar o salário total por departamento, usamos apenas as cláusulas SELECT, FROM, e GROUP BY.

Vamos dar uma olhada em como você pode usar cada uma dessas construções.

SELECIONE Colunas e Função Agregada

Nesta parte da consulta, você especifica as colunas a serem agregadas e devolvidas. Assim, para o salário total por departamento, o departamento é uma das colunas a serem devolvidas.

Você também escolhe aqui a função agregada. A função agregada é a métrica ou estatística que você deseja calcular para a coluna agrupada. Em nosso caso, SUM() é a função agregada. SQL também fornece outras funções agregadas integradas úteis. Dê uma olhada nesta tabela para várias funções agregadas e um exemplo de caso de uso para cada uma delas.

Aggregate FunctionExample Use Case
SUM()Find the total salary by department
COUNT()Find the number of employees in each department
MAX()Find the highest salary paid in each department
MIN()Find the lowest salary paid in each department
AVG()Find the average salary for each department

Para alterar a estatística, tudo o que você precisa fazer é usar a função apropriada. Por exemplo, se você quiser calcular o salário médio em vez disso, você pode usar:

Consulta:

SELECT department, AVG(annual_salary)
FROM employees
GROUP BY department;

Saída:

departmentAVG(annual_salary)
Finance11250
Marketing8500
Sales5000
Human Resources5000

Você também pode usar várias funções agregadas em conjunto. Por exemplo:

Consulta:

SELECT department, AVG(annual_salary), SUM(annual_salary)
FROM employees
GROUP BY department;

Saída:

departmentAVG(annual_salary)SUM(annual_salary)
Finance1125022500
Marketing850017000
Sales500010000
Human Resource50005000

DE <computador(es)> e ONDE <condições>

Nesta seção, você especifica a(s) tabela(s) de onde deseja obter as colunas e quaisquer condições que queira aplicar nas colunas selecionadas.

Digamos que você queira obter os dados de apenas dois departamentos - marketing e vendas - da employees mesa.

Consulta:

SELECT department, SUM(annual_salary)
FROM employees
WHERE department in (‘Marketing’,’Sales’)
GROUP BY department;

Saída:

departmentSUM(annual_salary)
Marketing17000
Sales10000

Listagem das colunas para agrupamento com um GROUP BY

Nesta parte da consulta, você especifica as colunas que deseja utilizar para agrupar os dados. Já vimos o agrupamento por departamento.

Uma coisa a ser cuidadosa aqui: se você estiver usando múltiplas colunas em sua declaração SELECT, você precisa incluí-las todas aqui na cláusula GROUP BY, exceto a(s) coluna(s) sendo usada(s) pela(s) função(ões) agregada(s). Se você não o fizer, provavelmente receberá um erro. Confira este artigo para erros comuns com GROUP BY e como evitá-los.

Assim, por exemplo, digamos que você queira SELECT e GROUP BY tanto departamento como nível. A consulta seria parecida com esta.

Consulta:

SELECT department, level, SUM(annual_salary)
FROM employees
WHERE department in (‘Marketing’,’Sales’)
GROUP BY department, level;

Saída:

departmentlevelSUM(annual_salary)
Marketing57000
Marketing1010000
Sales210000

Condições sobre a função agregada usando uma cláusula de HAVING

Você pode optar por refinar e filtrar a saída de uma consulta com uma função agregada, usando uma cláusula HAVING. Uma cláusula HAVING avalia a(s) condição(ões) sobre a saída de uma função agregada e retorna as linhas que satisfazem esse critério.

Assim, se você quiser encontrar todos os departamentos cujo salário médio é superior a 7000, você pode usar a seguinte consulta.

Consulta:

SELECT department, SUM(annual_salary)
FROM employees
GROUP BY department
HAVING AVG(annual_salary)>7000;

Saída:

departmentSUM(annual_salary)
Finance22500
Marketing17000

Nota: Não confunda a cláusula WHERE com a cláusula HAVING. Enquanto uma cláusula WHERE filtra registros de tabelas, uma cláusula HAVING filtra grupos.

Ordenação com uma cláusula ORDER BY

Finalmente, você pode classificar seus resultados usando uma cláusula ORDER BY. Ela pode ser usada para ordenar os resultados em ordem ascendente ou descendente.

Para ordenar os departamentos em ordem alfabética, você pode usar a seguinte consulta.

Consulta:

SELECT department, level, SUM(annual_salary)
FROM employees
WHERE department in (‘Marketing’,’Sales’,’Human Resources’)
GROUP BY department,level
ORDER BY department asc;  -- asc is used for ascending, desc for descending

Saída:

departmentlevelSUM(annual_salary)
Human Resource25000
Marketing57000
Marketing1010000
Sales210000

Para mais exemplos e casos de uso da cláusula GROUP BY, confira este artigo.

Pronto para Escrever seu SQL GROUP BY Query?

Se você leu o artigo até aqui, estou confiante de que você está pronto para escrever sua consulta SQL GROUP BY para obter o resultado desejado. Usei muitos exemplos de consultas neste artigo para familiarizá-lo com o processo de escrita de consultas. Confie em mim - a prática é a melhor maneira de melhorar na escrita de consultas. Para praticar consultas como estas e mais, você pode conferir a faixa Trilha de Práticas em SQL por LearnSQL. É uma maneira abrangente de aprimorar ainda mais sua habilidade.

SQL é uma ferramenta muito poderosa, não apenas para agregação de dados, mas também para muitos outros casos de uso que requerem crocante e manipulação de dados. Na verdade, é uma habilidade indispensável não apenas para analistas de dados, mas para qualquer pessoa que aspire a trabalhar em um ambiente onde as decisões são tomadas com base em dados.

Se você é novo em SQL e quer aprender mais sobre como escrever consultas SQL, eu recomendo fortemente o curso LearnSQL para escrever consultas básicas. Ele lhe dará uma base sólida para analisar dados com SQL e aumentar ainda mais a sua carreira.

Então, do que você está esperando? Comece hoje mesmo!