2 queries e uma conta final em um único SQL
2 minutos de leitura

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
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!
Avalie este artigo

Autor(a)
Guilherme Silveira
Co-fundador da Alura. Com mais de 20 anos de ensino de tecnologia, 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.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.



