20th Jul 2022 7 minutos de leitura Quem tem o mais alto salário, em termos de Departamento? Use SQL para Descobrir! Himanshu Kathuria sql aprender sql group by Índice A amostra do conjunto de dados O que é agregação? O GRUPO SQL POR Cláusula Exemplo de estrutura de uma consulta com uma cláusula "GROUP BY SELECIONE Colunas e Função Agregada DE <computador(es)> e ONDE <condições> Listagem das colunas para agrupamento com um GROUP BY Condições sobre a função agregada usando uma cláusula de HAVING Ordenação com uma cláusula ORDER BY Pronto para Escrever seu SQL GROUP BY Query? 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! Tags: sql aprender sql group by