Sobes.tech
Junior

Qual é a diferença entre as cláusulas WHERE e HAVING em SQL?

sobes.tech IA

Resposta da IA

WHERE filtra as linhas antes de agrupar. HAVING filtra os grupos criados com GROUP BY, depois de agrupar.

WHERE:

  • Aplica-se a linhas individuais.
  • Não pode usar funções de agregação (COUNT, SUM, AVG, MIN, MAX).
  • É executado antes de GROUP BY, HAVING e SELECT.

HAVING:

  • Aplica-se a grupos de linhas.
  • Pode usar funções de agregação.
  • É executado após WHERE e GROUP BY, mas antes de SELECT.

Exemplo:

Encontrar clientes da cidade 'Moscou' (onde WHERE) cujo valor total de pedidos excede 1000 (onde HAVING).

SELECT customer_id, SUM(order_amount)  -- Seleciona ID do cliente e soma dos seus pedidos
FROM orders  -- Da tabela de pedidos
WHERE city = 'Moscou'  -- Filtra linhas antes de agrupar, mantendo apenas pedidos de Moscou
GROUP BY customer_id  -- Agrupa linhas por ID do cliente
HAVING SUM(order_amount) > 1000;  -- Filtra grupos, mantendo apenas aqueles com soma de pedidos > 1000