Boa noite. Tudo bem?
Ainda não ficou claro quando devo usar o where e o having. Entendi a parte que um uso antes ou depois da claúsula GROUP BY, mas o que aconteceria se usasse o where antes do group by, não taria o mesmo resultado com o having?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa noite. Tudo bem?
Ainda não ficou claro quando devo usar o where e o having. Entendi a parte que um uso antes ou depois da claúsula GROUP BY, mas o que aconteceria se usasse o where antes do group by, não taria o mesmo resultado com o having?
Olá, Vinicius! Tudo bem?
Entendo a sua dúvida sobre a diferença entre WHERE e HAVING, vou buscar esclarecer de forma prática.
A cláusula WHERE é usada para filtrar registros antes de qualquer agrupamento ser feito. Ela atua nos dados brutos, ou seja, nos registros individuais da tabela. Por exemplo, se você quiser selecionar apenas cursos de uma determinada instituição antes de agrupá-los, você usaria WHERE.
Por outro lado, a cláusula HAVING é utilizada para filtrar registros após a aplicação do GROUP BY. Isso significa que ela atua sobre os grupos criados, permitindo que você aplique condições às agregações. Por exemplo, se você quiser mostrar apenas instituições que têm mais de dois cursos, você usaria HAVING após o GROUP BY.
Aqui está um exemplo para ilustrar:
-- Usando WHERE para filtrar antes do agrupamento
SELECT instituicao, COUNT(curso)
FROM Treinamento
WHERE instituicao = 'da Rocha'
GROUP BY instituicao;
-- Usando HAVING para filtrar após o agrupamento
SELECT instituicao, COUNT(curso)
FROM Treinamento
GROUP BY instituicao
HAVING COUNT(curso) > 2;
No primeiro exemplo, WHERE filtra os cursos da instituição "da Rocha" antes de contar e agrupar.
No segundo exemplo, HAVING filtra instituições que têm mais de dois cursos após a contagem e agrupamento.
Espero ter ajudado e fico à disposição se precisar.
Abraço e bons estudos!