Introdução à cláusula GROUP BY no SQL

Nos casos em que precisamos agrupar as linhas com o mesmo valor, a cláusula Group By entra em cena. A cláusula GROUP BY é um comando no SQL que executará esta operação.

O ponto importante a ser lembrado aqui é que a cláusula GROUP BY é usada na instrução SELECT na consulta após a cláusula WHERE.

Sintaxe

A sintaxe da cláusula Agrupar por é -

SELECT column_name1, column_name2, …
FROM table_name
WHERE conditions
GROUP By column_name1, column_name2, …
ORDER By column_name1, column_name2, …;

Explicação da sintaxe

  1. Instrução SELECT - consulta de comando SQL
  2. nome_tabela - o nome da tabela do banco de dados que está sendo referida
  3. conditions - consulte as condições a serem verificadas
  4. GROUP BY - cláusula para agrupar as mesmas linhas
  5. ORDER BY - sempre usado após a cláusula Group By para organizar as linhas em ordem crescente ou decrescente. Esta é uma condição opcional.

Como a cláusula GROUP BY funciona no SQL?

Para entender o funcionamento da cláusula Group By, tomemos a ajuda de um exemplo. Considere uma tabela com o nome de EMPREGADO, que contém os detalhes básicos do funcionário, como nome, idade, número de telefone, data de nascimento, sexo, endereço, ID de email etc.

Tabela de funcionários

nomeeratelefonegêneroo email
John23123Masculino
Pode22456Fêmea
Ana45644Fêmea
Vasos573456Fêmea
Res45456Fêmea
bronzeado782456Masculino
Correu345899Masculino
Wan557789Fêmea
Tung32.5689Masculino
Chung214678Masculino

Considere que o EMPREGADO possui cerca de 10 entradas.

Vamos primeiro obter os diferentes valores de "gênero" nesta tabela. A consulta que nos ajudará a alcançar nosso objetivo seria:

SELECT gender FROM EMPLOYEE;

Isso nos fornecerá os seguintes valores:

gênero
Masculino
Fêmea
Fêmea
Fêmea
Fêmea
Masculino
Masculino
Fêmea
Masculino
Masculino

O problema aqui é a redundância dos valores, ou seja, como podemos ver, existem apenas dois valores únicos de gênero na tabela, mas a saída não fornece apenas os valores únicos, mas todos os valores, mesmo que sejam repetitivos.

Portanto, para obter apenas os valores exclusivos da tabela, usaremos a seguinte consulta -

SELECT gender FROM EMPLOYEE GROUP BY gender;

O resultado que recebermos após executar esta consulta será -

gênero
Masculino
Fêmea

O Agrupar por agrupará todos os mesmos valores nas linhas e retornará apenas uma única entrada ou uma única linha para eles, como ocorreu com as linhas "Masculino" e "Feminino" na tabela. Isso resultou em apenas dois valores únicos que estavam presentes na coluna "gênero" i, e. Feminino e masculino.

Agora, vamos dar outro exemplo de uma tabela que contém os detalhes do departamento ao qual cada um desses funcionários está associado. Vamos chamar isso de tabela Employee_Department.

Tabela de departamento de funcionários

nomehoddepartamento
Johnhod1Serviço
Podehod2Finança
Anahod1Serviço
Vasoshod2Finança
Reshod3Tecnologia
bronzeadohod5Apoio, suporte
Correuhod3Serviço
Wanhod3Tecnologia
Tunghod3Finança
Chunghod5HR

Então agora vamos executar a consulta abaixo e procurar o resultado -

SELECT hod, department FROM Employee_Department GROUP BY hod, department;

A execução desta consulta busca o seguinte resultado -

hoddepartamento
hod1Serviço
hod2Finança
hod3Tecnologia
hod5Apoio, suporte
hod3Serviço
hod3Finança
hod5HR

A cláusula GROUP BY funciona no hod e no departamento para procurar as linhas exclusivas no cenário mencionado acima. Ele verificará a combinação de hod e departamento com outras entradas do hod e departamento para identificar sua exclusividade. Se o hod for o mesmo, mas o departamento for diferente, essa linha será tratada como única. Se o hod e o departamento forem iguais para mais de uma linha, a entrada duplicada não será criada e apenas uma linha será exibida.

Operações da cláusula GROUP BY

Podemos usar a cláusula Agrupar por com várias funções de agrupamento e agregação. Vamos dar alguns exemplos usando as duas tabelas mencionadas acima, isto é, EMPLOYEE e Employee_Department.

Exemplo 1

Obtendo a contagem de funcionários do sexo masculino e feminino na empresa.

SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;

A execução desta consulta busca o seguinte resultado -

COUNT ('nome')gênero
5Masculino
5Fêmea

Exemplo 2

Obtendo a contagem de departamentos da empresa em ordem decrescente da contagem.

SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;

A execução desta consulta busca o seguinte resultado -

COUNT ('nome')departamento
3Serviço
3Finança
2Tecnologia
1 1Apoio, suporte
1 1HR

Exemplo 3

Obtendo a contagem de diferentes departamentos sob o mesmo código na empresa em ordem decrescente da contagem.

SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;

A execução desta consulta busca o seguinte resultado -

COUNT ('nome')hoddepartamento
2hod1Serviço
2hod2Finança
2hod3Tecnologia
1 1hod5Apoio, suporte
1 1hod3Serviço
1 1hod3Finança
1 1hod5HR

A cláusula HAVING no SQL

O uso da cláusula HAVING com a cláusula Group By restringirá o resultado da consulta às linhas com o valor mencionado na cláusula Having.

Compreender isso com um exemplo facilitará -

Exemplo 4

SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;

A execução desta consulta busca o seguinte resultado -

nomeeratelefonegêneroo email
Pode22456Fêmea
Ana45644Fêmea
Vasos573456Fêmea
Res45456Fêmea
Wan557789Fêmea

Exemplo 5

SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;

A execução desta consulta busca o seguinte resultado -

nomehoddepartamento
Podehod2Finança
Vasoshod2Finança
Tunghod3Finança

Conclusão

Usando a cláusula GROUP BY com a instrução SELECT, podemos agrupar linhas com os mesmos valores, juntamente com o uso de funções agregadas, constantes e expressões.

Artigos recomendados

Este é um guia para a cláusula GROUP BY no SQL. Aqui discutimos como a cláusula GROUP BY funciona no SQL com a ajuda das tabelas Examples e Employee. Você também pode consultar os seguintes artigos para saber mais -

  1. Consulta de Inserção SQL
  2. Exibições SQL
  3. Banco de dados em SQL
  4. Transações em SQL