Artigos de Tecnologia e Negócios > Data Science

SQL having e video games

Guilherme Silveira
Guilherme Silveira

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.

Artigos de Tecnologia e Negócios > Data Science