SQL having e video games

(Última atualização em: 13 de abril de 2016)

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

Dica do aluno Gabriel Angeli que pelo tudo indica é viciado em jogos da Ubisoft.

Já conhece nosso curso de SQL Server?

Tech Education Leader no Alura

Próximo ArtigoAlura entrevista: Felipe Alencar