Questão nº 50
Questão de Tecnologia da Informação · FGV TCE-TO 2022 (nº 50)
No contexto do MySQL, o comando SQL que produz um desfecho diferente dos demais é:
- A```
SELECT País, count() Contagem
FROM Países
GROUP BY País
HAVING count() > 5
ORDER BY count(*)
``` - B```
SELECT País, count() Contagem
FROM Países
GROUP BY País
HAVING count() > 5
ORDER BY Contagem
``` - C```
SELECT País, count() Contagem
FROM Países
GROUP BY País
HAVING count() > 5
ORDER BY 2
``` - D```
SELECT País, count() Contagem
FROM Países
GROUP BY País
WHERE count() > 5
ORDER BY count(*)
``` (alternativa correta) - E```
SELECT País, count() AS Contagem
FROM Países
GROUP BY País
HAVING count() > 5
ORDER BY count(*)
```
Resposta comentada
Gabarito Alternativa D
Para entender a diferença, imagine que você está organizando uma festa. A cláusula `WHERE` é como uma triagem na porta, filtrando as pessoas antes de elas entrarem. A cláusula `HAVING` é como um filtro que você aplica depois que as pessoas já estão na festa e formaram grupos (por exemplo, grupos de amigos). Funções de agregação, como `COUNT()` (que conta itens em um grupo), só fazem sentido depois que os grupos foram formados.
(A) Incorreta: Este comando agrupa os países e filtra os grupos onde a contagem é maior que 5, ordenando pelo número de ocorrências. É sintaticamente correto e produz um resultado de dados.
(B) Incorreta: Similar à alternativa A, mas ordena pelo alias `Contagem`. Em MySQL, `ORDER BY` pode usar o alias da coluna, então o resultado é o mesmo da alternativa A.
(C) Incorreta: Similar à alternativa A, mas ordena pela segunda coluna selecionada (`count()`, que é `Contagem`). Em MySQL, `ORDER BY` pode usar a posição da coluna, então o resultado é o mesmo da alternativa A.
(D) Correta: Este comando tenta usar a função de agregação `count()` na cláusula `WHERE`. A cláusula `WHERE` filtra linhas antes do agrupamento, e funções de agregação só podem ser usadas depois do agrupamento (na cláusula `HAVING` ou no `SELECT`). Portanto, este comando gerará um erro de sintaxe no MySQL, produzindo um "desfecho diferente" (uma falha de execução) em comparação com os outros comandos que retornam dados. Armadilha da banca: A tentação é pensar que `WHERE` e `HAVING` são intercambiáveis, mas eles operam em etapas diferentes do processamento da consulta SQL.
(E) Incorreta: Similar à alternativa A, usando `AS Contagem` para definir o alias. O uso de `AS` é opcional para aliases em MySQL e não altera o resultado, que é o mesmo da alternativa A.
Fonte: FGV TCE-TO 2022 Analista Técnico - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.