2 queries e uma conta final em um único SQL

2 queries e uma conta final em um único SQL
Guilherme Silveira
Guilherme Silveira

Compartilhe

Quantos usuários do Alura já compraram livros na Casa do Código e quantos não? Fácil, executa duas queries, cria uma stored procedure (aiiiiiii meu coração), devolve um divido pelo outro:


select count(comprouNaCDC) as compraram 
from Aluno 
where comprouNaCDC = 1; > 200

select count(comprouNaCDC) as nao_compraram 
from Aluno 
where comprouNaCDC = 0; > 300
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!

E uma stored equivalente a:


porcentagem = compraram / (compraram + nao_compraram) > 0.40

Como diz minha sobrinha de 2 anos: -Uxi! E sai correndo, fugindo de medo.

Poderia agrupar, e fazer a divisão:


select count(comprouNaCDC), comprouNaCDC 
from Aluno 
group by comprouNaCDC; > 200, 1 > 300, 0

E usar a mesma fórmula em procedure ou programação: uxi.

Podemos só contar o total :)


select count(*) as total from Alunos; > 500

Se o seu banco usa 0 ou 1 para marcar quem comprou, soma todo mundo:


select sum(comprouNaCDC) as compraram 
from Alunos; > 200

Calma lá, é só dividir quem comprou pelo total. Uma unica query:


select sum(comprouNaCDC) / count(*) as porcentagem 
from Alunos; > 0.40

Tá lá, sem subquery, sem procedure, sem temporary table, doidice.

Desafio: e se o campo não fosse 0 e 1? Como você transformaria uma string 'S' e 'N' para a query acima funcionar? *CASO* você tenha uma sugestão, compartilhe!

Gostou do post? Quer aprender mais? Que tal dar uma olhada em nossos cursos de Banco de Dados?

ps: Essa boa prática é a primeira parte de uma super prática animal sugerida pelo aluno do Alura, Silvio Silva!

Guilherme Silveira
Guilherme Silveira

Co-fundador da Alura, da Caelum e do GUJ. Com 18 anos de ensino nas áreas de programação e dados, criou mais de 100 cursos. Possui formação em engenharia de software, viés matemático e criativo, além de ser medalhista de ouro em competições nacionais de computação, tendo representado o Brasil nos mundiais. Participante de comunidades open source e de educação em tecnologia, tendo escrito 7 livros. Faz mágica e fala coreano no tempo livre.

Veja outros artigos sobre Data Science