2 queries e uma conta final em um único SQL
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!