SQL having e video games
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?
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.