SQL having e video games
![SQL having e video games](https://www.alura.com.br/artigos/assets/code/sql-having-e-video-games.1722042037.png)
Tenho um banco de dados com informações sobre vendas de jogos. Gostaria de saber como estão as vendas por produtora, então agrupo como de costume:
SELECT produtora, count(*) as total
FROM vendas
GROUP BY produtora;
> Sony, 500 > ... 24 linhas ...
> Ubisoft, 1300 > ... 30 linhas ...
> Microsoft, 400 > ... 27 linhas ...
Mas repara que tem uma dezena de resultados "menores" que não estou tão interessado. Só queremos quem vendeu mais de 500?
![Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!](assets/alura-matricula-maior-escola-tecnologia-brasil-mais-500-mil-estudantes/matricula-escola-data-science-alura-saiba-mais-versao-mobile.png)
SELECT produtora,
count(*) as total
FROM vendas
WHERE sum(quantidade) > 500
GROUP BY produtora;
> No, no, no no
O banco de dados não aceita resultados de funções de agregação na cláusula "where", pois ela é usada para selecionar os registros...antes de agregar!
Subconsulta neles!
SELECT produtora, total
FROM ( SELECT produtora, count(*) as total
FROM vendas
GROUP BY produtora
) as temp
WHERE total > 500;
Resolvido? Sim, mas com uma "volta ao mundo".
Será que o SQL já não foi espertinho pra permitir "queriar" o resultado de uma agregação? Queria dizer que dentre os grupos que formei, aqueles que tem mais de 500, em inglês: having.
SELECT produtora, count(*) as vendas
FROM games
GROUP BY produtora
HAVING vendas > 500;
> Ubisoft | 1300
E se quer se aprofundar em SQL e banco de dados, vale conhecer nossos cursos de Oracle e cursos de SQL da Alura.