
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
- Instrução SELECT - consulta de comando SQL
- nome_tabela - o nome da tabela do banco de dados que está sendo referida
- conditions - consulte as condições a serem verificadas
- GROUP BY - cláusula para agrupar as mesmas linhas
- 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
| nome | era | telefone | gênero | o email |
| John | 23 | 123 | Masculino | |
| Pode | 22 | 456 | Fêmea | |
| Ana | 45 | 644 | Fêmea | |
| Vasos | 57 | 3456 | Fêmea | |
| Res | 45 | 456 | Fêmea | |
| bronzeado | 78 | 2456 | Masculino | |
| Correu | 34 | 5899 | Masculino | |
| Wan | 55 | 7789 | Fêmea | |
| Tung | 32. | 5689 | Masculino | |
| Chung | 21 | 4678 | Masculino |
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
| nome | hod | departamento |
| John | hod1 | Serviço |
| Pode | hod2 | Finança |
| Ana | hod1 | Serviço |
| Vasos | hod2 | Finança |
| Res | hod3 | Tecnologia |
| bronzeado | hod5 | Apoio, suporte |
| Correu | hod3 | Serviço |
| Wan | hod3 | Tecnologia |
| Tung | hod3 | Finança |
| Chung | hod5 | HR |
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 -
| hod | departamento |
| hod1 | Serviço |
| hod2 | Finança |
| hod3 | Tecnologia |
| hod5 | Apoio, suporte |
| hod3 | Serviço |
| hod3 | Finança |
| hod5 | HR |
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 |
| 5 | Masculino |
| 5 | Fê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 |
| 3 | Serviço |
| 3 | Finança |
| 2 | Tecnologia |
| 1 1 | Apoio, suporte |
| 1 1 | HR |
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') | hod | departamento |
| 2 | hod1 | Serviço |
| 2 | hod2 | Finança |
| 2 | hod3 | Tecnologia |
| 1 1 | hod5 | Apoio, suporte |
| 1 1 | hod3 | Serviço |
| 1 1 | hod3 | Finança |
| 1 1 | hod5 | HR |
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 -
| nome | era | telefone | gênero | o email |
| Pode | 22 | 456 | Fêmea | |
| Ana | 45 | 644 | Fêmea | |
| Vasos | 57 | 3456 | Fêmea | |
| Res | 45 | 456 | Fêmea | |
| Wan | 55 | 7789 | Fêmea |
Exemplo 5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
A execução desta consulta busca o seguinte resultado -
| nome | hod | departamento |
| Pode | hod2 | Finança |
| Vasos | hod2 | Finança |
| Tung | hod3 | Finanç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 -
- Consulta de Inserção SQL
- Exibições SQL
- Banco de dados em SQL
- Transações em SQL