2 queries e uma conta final em um único SQL
![2 queries e uma conta final em um único SQL](https://www.alura.com.br/artigos/assets/code/2-queries-e-1-conta-final-em-um-unico-sql.1722040066.png)
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!](assets/alura-matricula-maior-escola-tecnologia-brasil-mais-500-mil-estudantes/matricula-escola-data-science-alura-saiba-mais-versao-mobile.png)
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!