32 – Selecione grupos (tendo)

watch video

Bem como a cláusula “where” permite que você selecione (ou rejeitar) registra indivíduo; A cláusula “Tendo” permite selecionar (ou rejeitar) um grupo de registros.

Se quisermos saber quantos livros agrupados por editorial usamos as seguintes instruções já aprendidas:

 select editorial, count(*) from libros group by editorial;

Se quisermos saber quantos livros agrupados por editoriais, mas considerando apenas alguns grupos, por exemplo, aqueles que retornam um valor maior que 2, usamos as seguintes instruções:

 select editorial, count(*) from libros group by editorial having count(*)>2;

“ter” é usado, seguido pela condição de pesquisa, para selecionar certas linhas retornadas pelo “grupo por” cláusula.

Vamos Veja outros exemplos. Queremos os preços médios agrupados por editorial, mas apenas os grupos cuja média excedem 25 pesos:

 select editorial, avg(precio) from libros group by editorial having avg(precio)>25;

Em alguns casos é possível confundir as cláusulas “onde “E” ter “. Queremos contar os logs agrupados por editorial sem levar em conta o editor “Planeta”.

Analise as seguintes frases:

 select editorial, count(*) from libros where editorial'Planeta' group by editorial; select editorial, count(*) from libros group by editorial having editorial'Planeta';

Ambos retornam o mesmo resultado, mas são diferentes. O primeiro, selecione todos os registros rejeitando o “planeta” editorial e depois os agrupa para contá-los. O segundo, seleciona todos os registros, os agrupa para contá-los e, finalmente, rejeitar linha com a conta correspondente à casa de publicação “planeta”.

Não devemos confundir a cláusula “Where” com a cláusula “Tendo” ; O primeiro estabelece condições para a seleção de registros de um “seleto”; O segundo define condições para a seleção de registros de um “grupo por”.

Vamos ver outros exemplos combinando “onde” e “tendo”. Queremos o número de livros, sem considerar o preço nulo, agrupado por editorial, sem considerar o editor “Planet”:

 select editorial, count(*) from libros where precio is not null group by editorial having editorial'Planeta';

Aqui, selecione os registros que rejeitam Aqueles que não cumprem a condição dada em “onde”, depois agrupam-os por “editorial” e, finalmente, rejeita os grupos que não cumprem a condição dada no “havir”.

A cláusula é usado “ter” com funções de grupo, isso não pode fazer a cláusula “onde”. Por exemplo, queremos os preços médios agrupados por editoriais, dos editoriais que têm mais de 2 livros:

 select editorial, avg(precio) from libros group by editorial having count(*) > 2; 

em uma cláusula “Tendo”, pode haver vários termos. Ao usar várias condições, você tem que combiná-los com operadores lógicos (e, ou, não).

Podemos encontrar o valor mais alto dos livros agrupados e classificados por editorial e selecionar as linhas que têm um valor Menos de 100 e superior a 30:

 select editorial, max(precio) as mayor from libros group by editorial having min(precio)30 order by editorial; 

Então, usamos o clouse “tendo” para restringir as linhas que retornam um “grupo por” saída. Sempre vai após a cláusula “Grupo por” e antes da cláusula “Ordem por”, se tiver.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *