Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Estruturar

*Olá, pessoal! Boa noite! *

Estou com dificuldade para estruturar e escolher a melhor forma de visualização!

Por exemplo, me fiz um questionamento: "E se eu quisesse saber: Quantos homens em São Paulo tem mais de 18 anos e menos que 30 anos?"

Eu fiz uma formula: "Select Estado, Sexo, Idade from tabela_de_clientes where Estado = 'SP' AND SEXO = 'M';"

E consegui entender que são 2! Mas na hora de aplicar, eu me perco! Fico em dúvida de usar Where ou Having e quando faço ambos dão erro!

Having:

SELECT SEXO, COUNT(IDADE) AS TOTAL from tabela_de_clientes 
group by ESTADO HAVING SEXO = 'M', ESTADO = 'SP', IDADE >= 18 AND <= 30;

Where:

Select Estado, Sexo, Idade from tabela_de_clientes  
where Estado = 'SP' AND SEXO = 'M'  and IDADE > 18 AND <= 30;

Quando o professor faz, consigo fazer, mas pensar fora disso, estou com dificuldade...

1 resposta
solução!

Oi, Paula! Tudo certo por aí?

Durante o nosso processo de aprendizagem e descoberta de novas assuntos, é normal conseguirmos realizar a prática juntamente com o instrutor e sentir dificuldade em fazermos sozinhas. Com o tempo, vamos consolidando os nossos conhecimentos e os comandos tendem a ficar mais claros, então não se preocupe com isso!

Com relação ao WHERE e o HAVING, ambas são cláusulas que trabalham com filtro. No entanto, o HAVING será somente utilizado em conjunto com GROUP BY, que realiza agrupamentos de registros. A sintaxe geral do HAVING é esta:

SELECT coluna1 FROM tabela
GROUP BY coluna1
HAVING coluna2 >= valor;

O WHERE, por outro lado, será usado em consultas que não possuem GROUP BY, como mostra o exemplo abaixo:

SELECT * FROM tabela
WHERE coluna1 = valor;

Sabendo disso, podemos partir para o seu cenário, cuja cláusula mais recomendada é o WHERE, pois não precisamos do GROUP BY. O SELECT que você compartilhou está no caminho certo, precisaremos apenas alterar alguns detalhes, observe:

1 - Para contar a quantidade de homens, utilizaremos a função COUNT(), que faz justamente isso (contagem). Dentro de seus parênteses, iremos colocar um asterisco, informando que a contagem acontecerá a partir de cada linha da tabela;

2 - A coluna IDADE não precisa aparecer na consulta, uma vez que os dados serão agrupados, então podemos removê-la;

3 - Em IDADE > 18 AND <= 30, é necessário escrever duas vezes o nome da coluna IDADE, indicando que duas comparações serão feitas ao mesmo tempo. Além disso, como queremos as pessoas com idade inferior a 30 anos, podemos retirar o sinal de igual contido em <= 30;

Depois dessas mudanças, chegamos no seguinte SELECT:

Select Estado, Sexo, COUNT(*) AS TOTAL from tabela_de_clientes  
where Estado = 'SP' AND SEXO = 'M'  and IDADE > 18 AND IDADE < 30

Analisando o resultado, vemos justamente aquilo que você disse: existem duas pessoas do sexo masculino cuja idade é superior a 18 e inferior a 30:

EstadoSexoTOTAL
SPM2

Paula, espero ter ajudado com a explicação! Continue sempre com essa dedicação nos estudos que você vai longe. Qualquer dúvida, saiba que pode contar com a Alura.

Abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!