Exemplos com Group By e com a cláusula Having - Totalizando Dados: SQL Server 2008 - Parte 2
Acompanhe diversos exemplos práticos com o Group By e com a cláusula Having em conjunto com o Group By.
Para compreendermos melhor o uso do GROUP BY, considere a tabela Produtos (lembrando que os valores associados aos nomes são fictícios e são apenas usados para este exemplo):
Saiba mais: GROUP BY SQL Tutorial
Vamos supor que desejemos obter o número de produtos em estoque, agrupados pelo tipo, para que depois seja feita a soma da quantidade existente em cada um dos grupos. Para isso usamos a função SUM() em conjunto com o GROUP BY, como a instrução a seguir nos mostra:
SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque'
FROM Produtos
GROUP BY Tipo
Executando a instrução acima temos o seguinte resultado:
Podemos também contar o número de produtos em estoque de acordo com os fabricantes disponíveis. Assim como no exemplo anterior, mais agora levando em conta os fabricantes, os produtos devem ser agrupados por eles, para que depois sejam contabilizados os produtos em relação a essa divisão. Para isso, devemos usar a seguinte instrução:
SELECT Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'
FROM Produtos
GROUP BY Fabricante
Assim temos o seguinte resultado:
Agora vamos somar a quantidade de produtos em estoque de acordo com os tipos e fabricantes disponíveis. Primeiro, será agrupados os produtos de acordo com os tipos e fabricantes, para que depois seja feita a soma de cada um desses grupos (essa é a ordem que o SQL Server faz logicamente, mais nossa instrução segue a ordem inversa). Confira como fazer isso a seguir:
SELECT Tipo, Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'
FROM Produtos
GROUP BY Tipo, Fabricante
Assim teremos este resultado:
Podemos também obter o valor total dos produtos em estoque, agrupados por tipo. Veja como:
SELECT Tipo, SUM(Quantidade * VlUnitario) AS 'Valor do Estoque'
FROM Produtos
GROUP BY Tipo
Temos o seguinte resultado:
Deixo como dica para vocês experimentarem fazer outras combinações com o GROUP BY em conjunto com as funções descritas anteriormente, visando assim treinar os conceitos apresentados até aqui.
Cláusula HAVING com GROUP BY – A cláusula HAVING determina uma condição de busca para um grupo ou um conjunto de registros, definindo critérios para limitar os resultados obtidos a partir do agrupamento de registros. É importante lembrar que essa cláusula só pode ser usada em parceria com GROUP BY.
SQL nível Jedi: Subqueries
- Um bate papo sobre Subqueries:
Grande parte dos desenvolvedores recorrem somente ao JOIN para resolver consultas que envolvem múltiplas tabelas. Hoje falaremos sobre uma outra ferramenta para isso que pode resolver cenários em que o JOIN não atenda, as subqueries.
Primeiros passos no SQL
- Eu preciso aprender SQL?:
SQL é a linguagem padrão para acesso a dados em bancos relacionais. Por conta disso, é através dela que iniciamos nossos primeiros diálogos com os SGBDs, sistemas gerenciadores de bancos de dados.
A cláusula GROUP BY pode ser empregada, entre outras finalidades, para agrupar os produtos de acordo com cada tipo existente. Dentro de cada um dos grupos, a cláusula HAVING pode ser usada para restringir apenas os registros que possuem uma quantidade superior a 200 unidades no estoque, por exemplo.
Obs: O HAVING é diferente do WHERE. O WHERE restringe os resultados obtidos sempre após o uso da cláusula FROM, ao passo que a cláusula HAVING filtra o retorno do agrupamento.
Para fazermos o filtro conforme especificado acima, devemos usar a seguinte instrução:
SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque'
FROM Produtos
GROUP BY Tipo
HAVING SUM(Quantidade) > 200
Assim teremos o seguinte resultado:
Perceba que este tipo de filtragem nos retornou apenas 2 registros, que são os tipos que, somados, ultrapassam o valor de 200 unidades em estoque.
Outro exemplo: vamos agrupar os produtos com base nos tipos e fabricantes disponíveis. Logo após, retornaremos apenas os registros cuja quantidade supera novamente as 200 unidades em estoque. Veja a instrução e o resultado a seguir:
SELECT Tipo, Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'
FROM Produtos
GROUP BY Tipo, Fabricante
HAVING SUM(Quantidade) > 200
Note que agora temos 3 registros. Vamos agora fazer um exemplo mais complexo: vamos supor que o agrupamento deverá ser feito pelo Nome. Dentro deste agrupamento, desejamos obter apenas aqueles cuja quantidade novamente supera as 200 unidades em estoque e cujo valor estocado seja igual ou superior a 100 mil. Veja como fazer a seguir, e seu resultado:
SELECT Nome, SUM(Quantidade) AS 'Quantidade em Estoque', SUM(Quantidade * VlUnitario) AS 'Valor em Estoque'
FROM Produtos
GROUP BY Nome
HAVING SUM(Quantidade) > 200 AND SUM (Quantidade * VlUnitario) >= 10000.00
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo