Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
- Código
- qa537502
- Banca
- FUNDATEC
- Órgão
- CIGA SC
- Ano
- 2023
- Cargo
- Prog ( )
- Aa m 1 2 2 5
- Ba m 1 2 2 2
- Ca m 1 2 2 2 5 5
- Da m 1 2 2 2 5 2
- Ea m 1 3 2 2 5 5
GabaritoE — a m 1 3 2 2 5 5
Gabarito: letra E. A consulta select a, max(c) m from base group by a order by a; agrupa as linhas pelo valor da coluna a e, para cada grupo, retorna o maior valor da coluna c (função de agregação MAX), ordenando o resultado pelo próprio a em ordem crescente. Como os dados inseridos são (1,1,2), (1,2,2), (1,2,3), (2,2,2) e (5,2,5), os grupos são a=1 (com c máximo igual a 3), a=2 (com c máximo igual a 2) e a=5 (com c máximo igual a 5), resultando exatamente na tabela da alternativa E.
A consulta apresentada é um exemplo clássico de agregação de dados em SQL. A cláusula GROUP BY particiona as linhas da tabela em grupos que compartilham o mesmo valor na(s) coluna(s) especificada(s). No caso, GROUP BY a cria três grupos: um para a=1, um para a=2 e um para a=5. Para cada grupo, a função de agregação MAX(c) é aplicada, retornando o maior valor de c dentro daquele grupo. A cláusula ORDER BY a apenas ordena o resultado final pela coluna a em ordem crescente (padrão ASC), o que não altera os valores agregados, apenas a sequência de exibição.
Vamos detalhar o processo com os dados fornecidos. A tabela base após os cinco INSERTs contém as seguintes linhas:
a | b | c |
|---|---|---|
1 | 1 | 2 |
1 | 2 | 2 |
1 | 2 | 3 |
2 | 2 | 2 |
5 | 2 | 5 |
Ao executar GROUP BY a, o banco separa as linhas em três grupos:
Grupo a=1: linhas (1,1,2), (1,2,2), (1,2,3) → MAX(c) = 3
Grupo a=2: linha (2,2,2) → MAX(c) = 2
Grupo a=5: linha (5,2,5) → MAX(c) = 5
O ORDER BY a ordena os grupos por a crescente: 1, 2, 5. O resultado final é:
a | m |
|---|---|
1 | 3 |
2 | 2 |
5 | 5 |
A pegadinha desta questão está em confundir MAX(c) com outra agregação, como COUNT, SUM ou até mesmo um simples SELECT sem agregação. Muitos candidatos podem erroneamente considerar o valor de c da primeira linha de cada grupo (2, 2, 5) ou o último valor inserido, mas a função MAX sempre retorna o maior valor do grupo. Outra armadilha é esquecer que o GROUP BY agrupa por a, e não por b ou c, e que o ORDER BY não influencia na agregação.
A banca explora a confusão entre MAX(c) e o valor de c da primeira linha de cada grupo. No grupo a=1, o primeiro valor de c é 2, mas o máximo é 3. O candidato que não domina a função de agregação pode marcar a alternativa A (que traz 1 2), caindo na armadilha. Lembre-se: MAX varre todas as linhas do grupo e retorna o maior valor, não o primeiro.
Apresenta 1 2 e 2 5. O erro está no grupo a=1: o MAX(c) é 3, não 2. Além disso, omite o grupo a=5, que deveria aparecer com m=5. Essa alternativa parece combinar o primeiro valor de c de cada grupo com o último, mas não corresponde à agregação correta.
Apresenta 1 2 e 2 2. O erro está no grupo a=1: o MAX(c) é 3, não 2. Também omite o grupo a=5. Essa alternativa usa o primeiro valor de c de cada grupo, ignorando a função MAX.
Apresenta 1 2, 2 2 e 5 5. O erro está no grupo a=1: o MAX(c) é 3, não 2. Embora inclua o grupo a=5 corretamente, o valor para a=1 está errado. Essa alternativa também usa o primeiro valor de c de cada grupo.
Apresenta 1 2, 2 2 e 5 2. O erro está no grupo a=1 (deveria ser 3) e no grupo a=5 (deveria ser 5, não 2). Essa alternativa mistura valores incorretos, provavelmente confundindo MAX(c) com o valor de b ou com o primeiro c de cada grupo.
Apresenta 1 3, 2 2 e 5 5. Para o grupo a=1, o MAX(c) é 3 (maior entre 2, 2 e 3). Para a=2, o MAX(c) é 2 (único valor). Para a=5, o MAX(c) é 5 (único valor). A ordenação por a crescente está correta. Esta é a única alternativa que reflete fielmente a execução da consulta.
Gabarito: letra E
Link permanente: /questoes/qa537502