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

Where ou Having?

Boa tarde. Assisti à aula, li a parte teórica após o vídeo, mas ainda não entendi quando usar uma ou outra. Na videoaula a instrutora fez uso da cláusula having. Eu usei o where, assim:

SELECT nome, preco from produtos where preco > (SELECT AVG(preco) from produtos);

e obtive o mesmo resultado. Sempre será possível escolher entre uma ou outra cláusula?

1 resposta
solução!

A cláusula WHERE é usada para filtrar linhas antes de qualquer agrupamento com** GROUP BY**, e não permite o uso direto de funções de agregação como AVG, SUM, etc.

Já a cláusula HAVING é usada depois do GROUP BY, justamente para filtrar os grupos com base em funções de agregação.

No código abaixo, você não está usando GROUP BY, então o uso de WHERE está correto e funciona.

SELECT nome, preco 
FROM produtos 
WHERE preco > (SELECT AVG(preco) FROM produtos);

No entanto, se estivesse agrupando, precisaria usar HAVING.

SELECT categoria, AVG(preco) 
FROM produtos 
GROUP BY categoria 
HAVING AVG(preco) > 100;

Então, depende do momento em que o filtro está sendo aplicado: antes ou depois do agrupamento.