Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023

Banco de DadosConsultas e Comandos em SQL
Código
qa537502
Banca
FUNDATEC
Órgão
CIGA SC
Ano
2023
Cargo
Prog ( )
Os comandos abaixo foram executados com sucesso, na ordem em que aparecem, em um banco de dados relacional:   INSERT INTO base (a,b,c) VALUES (1,1,2); INSERT INTO base (a,b,c) VALUES (1,2,2); INSERT INTO base (a,b,c) VALUES (1,2,3); INSERT INTO base (a,b,c) VALUES (2,2,2); INSERT INTO base (a,b,c) VALUES (5,2,5);   Qual o resultado do comando abaixo? select a, max(c) m from base group by a order by a;
  1. Aa m 1 2 2 5
  2. Ba m 1 2 2 2
  3. Ca m 1 2 2 2 5 5
  4. Da m 1 2 2 2 5 2
  5. Ea m 1 3 2 2 5 5
Revelar gabarito e comentário

GabaritoE — a m 1 3 2 2 5 5

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Consultas SQL: GROUP BY, MAX e ORDER BY

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.

NÃO CAIA NESSA!

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.

Alternativa A — ❌ Incorreta

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.

Alternativa B — ❌ Incorreta

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.

Alternativa C — ❌ Incorreta

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.

Alternativa D — ❌ Incorreta

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.

Alternativa E — ✅ Correta ⟵ GABARITO

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