Alternativa D - Estabelecer condições de filtro com funções de agregação.
Introdução à Agregação no SQL
No contexto de bancos de dados SQL, quando realizamos operações de agregação, utilizamos funções como COUNT(), SUM(), AVG(), MAX() e MIN() para calcular valores sobre múltiplas linhas. Para aplicar essas funções em subconjuntos de dados, usamos a cláusula GROUP BY.
No entanto, muitas vezes precisamos filtrar esses grupos já formados com base nos resultados calculados. É aqui que entra a cláusula HAVING.
Análise Comparativa: WHERE vs HAVING
A confusão comum entre estudantes ocorre devido à semelhança com a cláusula WHERE. É fundamental distinguir seus momentos de execução na ordem lógica de processamento de uma consulta SQL:
| Cláusula | Momento de Execução | O que faz? | Pode usar Funções de Agregação? |
|---|
| WHERE | Antes do agrupamento (GROUP BY) | Filtra linhas individuais | Não |
| HAVING | Depois do agrupamento (GROUP BY) | Filtra grupos resultantes | Sim |
Justificativa Detalhada
A alternativa D está correta porque a cláusula HAVING foi criada especificamente para permitir filtros sobre os grupos após a agregação ter ocorrido.
- Exemplo Prático: Imagine uma tabela de vendas e queremos encontrar apenas os vendedores que venderam mais de 50 itens.
SELECT vendedor, COUNT(*) AS total_vendas
FROM vendas
GROUP BY vendedor
HAVING COUNT(*) > 50; -- Filtro aplicado ao resultado da agregação
Neste exemplo, o WHERE não poderia ser usado para verificar COUNT(*) > 50 antes mesmo de contar. O HAVING é a ferramenta correta para estabelecer essa condição baseada na função agregada.
As outras alternativas descrevem funções diferentes:
- A: Descreve a cláusula
GROUP BY. - B: Refere-se ao uso de
DISTINCT. - E: Refere-se a
LIMIT ou TOP.