Buscar

sql 2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

GROUP BY 
 
SUMÁRIO 
• Funções de Grupo 
• Clausula Group BY 
• Cláusula Having 
 
Funções de Grupos 
 
Funções de grupo operam sobre conjuntos de linhas. Elas retornam resultados baseados sobre um grupo de 
linhas, antes que um resultado por linha tenha retornado como uma função de linha única. Como padrão todas 
as linhas de um tabela são trilhadas como um grupo. A clausula GROUP BY da declaração do SELECT é 
usada para agrupar as linhas em menores grupos. 
 
• Funções de Grupo 
• AVG (x) 
• Retorna o valor médio da coluna x. 
• Exemplo: AVG (salario) 
• Ignora os valores nulos. 
• MAX (x) 
• Retorna o valor máximo da coluna x. 
• Exemplo: MAX (salario) 
• Ignora os valores nulos. 
• MIN (x) 
• Retorna o valor mínimo da coluna x. 
• Exemplo: MIN (salario) 
• Ignora os valores nulos. 
• SUM (x) 
• Retorna a soma da coluna x. 
• Exemplo: SUM (salario) 
• Ignora os valores nulos. 
• COUNT (x) 
• Retorna o número de valores não nulos da coluna x. 
• Exemplo: COUNT (perc_comissao) 
• COUNT (* ) 
• Retorna o número de linhas de uma tabela. 
• Exemplo: COUNT (*) 
• Considera os valores nulos. 
 
DISTINCT faz uma função de grupo considerar valores não duplicados; ALL considera todos os valores. Se 
omitida a consulta considera ALL como default; 
 
 
Implementação de Banco de Dados Professor Ventury 1 
 
 
Exemplos 
 
AVG(X) 
SQL> SELECT AVG(salario) FROM C_EMPR; 
 
AVG (SALARIO) 
---------------------- 
 1255,08 
 
 
MAX(X) 
SQL> SELECT MAX(salario) FROM C_EMPR; 
 
MAX (SALARIO) 
---------------------- 
 2500 
 
 
MIN(X) 
SQL> SELECT MIN(salario) FROM C_EMPR; 
 
MIN (SALARIO) 
---------------------- 
 750 
 
 
SUM (X) 
SQL> SELECT SUM(salario) FROM C_EMPR; 
 
SUM (SALARIO) 
---------------------- 
 31377 
 
 
COUNT (*) 
SQL> SELECT COUNT(*) FROM C_EMPR; 
 
COUNT (*) 
--------------- 
 25 
 
 
COUNT (X) 
SQL> SELECT COUNT(PERC_COMISSAO) FROM C_EMPR; 
 
COUNT (PERC_COMISSAO) 
---------------------------------------- 
 5 
 
Observação: apesar de existirem 25 empregados apenas 5 possuem valores diferentes de nulo na coluna 
perc_comissão. 
 
Implementação de Banco de Dados Professor Ventury 2 
 
 
Aqrupando os Resultados da Querv 
 
Outro recurso do comando SELECT é a possibilidade de agruparmos nossos dados, utilizando a cláusula 
GROUP BY. 
 
Sintaxe: 
• SELECT nome da coluna [ , nome da coluna] 
FROM nome da tabela 
WHERE condição 
GROUP BY expressão 
 
onde 
expressão especifica as colunas cujos valores determinam a base para o grupo de linhas; 
group by produz uma linha sumarizada para cada grupo de linhas selecionado. 
 
Após utilizarmos a cláusula GROUP BY dividir as linhas de uma tabela em um grupo menor. Funções de grupo 
devem ser usadas para resumir informações por cada grupo. 
 
Por exemplo se desejamos saber a média salarial de cada departamento da empresa podemos dar o comando 
abaixo: 
 
 
 
Observe que a média salarial foi calculada para cada departamento e que listamos o id_Depto e o valor da 
média. 
Um cuidado a ser tomado é que na lista de colunas,quando usamos Group By somente podem constar funções 
de group ou colunas que estejam descriminadas na claúsula group by. Observe o exemplo da figura abaixo 
 
 
 
Observe o erro apontado pelo Oracle informando que SALARIO ( coluna com o asteristico embaixo) não é 
uma função de grupo nem esta na clausula group by. 
 
Grupos dentro de Grupos 
 
Podemos usar a clausula GROUP BY para prover resultados para grupos dentro de grupos. 
Implementação de Banco de Dados Professor Ventury 3 
 
 
 Se desejássemos listar a quantidade de empregados que temos em cada cargo em cada departamento 
poderíamos dar o comando mostrado na figura abaixo. 
 
 
 
Devemos tomar cuidado em discriminar todas as colunas que desejamos exibir na cláusula group by ou 
ocorrerá um erro com já vimos. 
Observe a figura abaixo e tire suas conclusões. 
 
 
Implementação de Banco de Dados Professor Ventury 4 
 
 
 
Restringindo Dados Agrupados 
 
Quando utilizamos a cláusula GROUP BY podemos restringir nossa seleção de dados em dois momentos: 
antes ou depois do agrupamento (e seus cálculos: médias, totais, etc.). 
 
Decidiremos quando executar esta limitação de acordo com o momento em que a mesma pode ocorrer. Se não 
utilizarmos para tal decisão o resultado dos cálculos efetuados pela cláusula GROUP BY, podemos limitar 
nosso resultado através da cláusula WHERE, caso contrário devemos utilizar a cláusula HAVING. 
 
A Cláusula HAVING 
 
A cláusula HAVING tem função semelhante a cláusula WHERE, que é ser o elemento de declaração do Join 
entre resultados agrupados. Quando temos um comando GROUP BY, o SQL checa se existe pelo menos uma 
função de agrupamento assim como um elemento agrupador dos dados, caso contrário retornará um erro. 
 
O elemento agrupador, por sua vez, tem que estar referenciado na cláusula GROUP BY e caso o resultado de 
uma função de agrupamento deva ser submetido a comparação, utiliza-se a cláusula HAVING. 
 
Vejamos alguns exemplos 
 
Vamos alterar o comando anterior para que inclua apenas cargos que possuam o texto VP Tal valor já consta 
da tabela, não sendo necessário o agrupamento pela cláusula GROUP BY. 
 
Utilizaremos então a cláusula WHERE para efetuar a restrição. 
 
 
 
 
Vamos agora selecionar aqueles cuja soma dos salários seja igual ou maior que 2000. 
A clausula WHERE não pode ser usada para restringir itens de grupo. 
A seguinte declaração da clausula WHERE é errada. 
 
 
 
 
 
Implementação de Banco de Dados Professor Ventury 5 
 
 
Este é um dado calculado pela cláusula GROUP BY, devendo portanto ser limitado pela cláusula 
HAVING, conforme podemos ver na figura abaixo. 
 
 
 
Você pode unicamente usar WHERE para restringir linhas individuais. Para restringir colunas de grupos usa-se 
a clausula HAVING: 
 
 
Podemos ainda utilizar a clausula Having filtrando por uma função de grupo que não aparece na lista do 
Select 
 
 
 
Uma observação importante é que mesmo que não estejamos utilizando um função de grupo na lista do 
Select, se tivermos uma clausula HAVING, ou seja, estejamos fazendo a filtragem do resultado por uma 
função de grupo obrigatoriamente temos que ter a clausula GROUP BY. 
 
Observe os erros nas figuras abaixo. 
 
 
Na figura acima utilizamos um clausula having sem group by . 
 
Implementação de Banco de Dados Professor Ventury 6 
 
 
 
Na figura acima utilizamos uma função de grupo na clausula where . 
 
Funcionamento do Comando Group By 
 
Um comando com clausulas Where e Having funciona obedecendo os seguintes passos: 
1 Primeiro as linhas são selecionadas as linhas da tabela que satisfazem a condição da cláusula 
Where( se não existir todas a linhas são selecionadas) 
2 As linhas são agrupadas 
3 A função de grupo é aplicada ao Grupo 
4 Os grupos que satisfazem a condição do Having são exibidos ( se não existir todos os grupos 
serão exibidos) 
 
Comando Select 
 
O comando Select completo possui então o seguinte formato 
SELECT coluna(s) 
FROM tabela(s) 
WHERE condição linha 
GROUP BY coluna(s) 
HAVING condição de grupo de linhas 
ORDER BY coluna(s); 
 
 
Implementação de Banco de Dados Professor Ventury7 
	SUMÁRIO
	Funções de Grupo
	Clausula Group BY
	Funções de Grupos
	Exemplos
	Aqrupando os Resultados da Querv
	Após utilizarmos a cláusula GROUP BY dividir as linhas de u
	Observe o erro apontado pelo Oracle informando que SALARIO 
	Grupos dentro de Grupos
	Se desejássemos listar a quantidade de empregados que temos 
	Devemos tomar cuidado em discriminar todas as colunas que de
	Observe a figura abaixo e tire suas conclusões.
	Restringindo Dados Agrupados
	A Cláusula HAVING
	Vejamos alguns exemplos
	Podemos ainda utilizar a clausula Having filtrando por uma f
	Uma observação importante é que mesmo que não estejamos util
	Funcionamento do Comando Group By
	Um comando com clausulas Where e Having funciona obedecendo 
	Primeiro as linhas são selecionadas as linhas da tabela que 
	As linhas são agrupadas
	A função de grupo é aplicada ao Grupo
	Comando Select

Outros materiais