SQL having e video games

Alura

Compartilhe

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!

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!

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.

Veja outros artigos sobre Data Science