Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
vu195621
Banca
VUNESP
Órgão
EsFCEx
Ano
2023
Cargo
CFO/QC ( )

Considere a seguinte tabela de um banco de dados relacional:

 

Time (ID, Nome, Cidade, Estado)

 

O comando SQL para obter o número de registros de cada Estado presente na tabela, além do nome do Estado, é:

  1. ASELECT Count (Estado), Estado FROM Time GROUP BY Estado;
  2. BSELECT Sum (Estado), Estado FROM Time ORDER BY Estado;
  3. CSELECT Count (Estado), Estado FROM Time HAVING Estado IN Group;
  4. DSELECT Max (Estado) – Min (Estado) FROM Time GROUP BY Estado;
  5. ESELECT Number (Estado), Estado FROM Time WHERE Estado IS NOT NULL;
Revelar gabarito e comentário

GabaritoA — SELECT Count (Estado), Estado FROM Time GROUP BY Estado;

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”.

Funções de agregação e agrupamento no SQL

Gabarito: letra A. Para obter o número de registros de cada Estado presente na tabela, além do nome do Estado, é necessário usar a função de agregação COUNT combinada com a cláusula GROUP BY na coluna Estado. A sintaxe correta é SELECT COUNT(Estado), Estado FROM Time GROUP BY Estado;, que agrupa as linhas por Estado e conta quantas linhas existem em cada grupo.

O SQL (Structured Query Language) é a linguagem padrão para acesso e manipulação de bancos de dados relacionais. É uma linguagem declarativa: o usuário especifica o que deseja obter, não como obter. As funções de agregação são usadas para resumir informações de várias linhas (tuplas) em um único valor. As principais funções de agregação embutidas no SQL são: COUNT, SUM, MAX, MIN e AVG. A sintaxe básica é SELECT FUNCAO(coluna) FROM tabela WHERE condição;.

A função COUNT retorna o número de linhas que atendem a um critério. Quando usada com GROUP BY, ela conta as linhas de cada grupo formado pelos valores distintos da coluna agrupada. No caso da questão, queremos contar quantos times existem em cada Estado. A consulta SELECT COUNT(Estado), Estado FROM Time GROUP BY Estado; agrupa as linhas da tabela Time pelos valores distintos da coluna Estado e, para cada grupo, conta quantas linhas existem (ou seja, quantos times daquele Estado). O resultado é uma tabela com duas colunas: o nome do Estado e o número de registros (times) daquele Estado.

A cláusula GROUP BY é essencial quando combinamos colunas com funções de agregação: ela define os grupos sobre os quais a função será aplicada. Sem ela, a função de agregação trataria todas as linhas como um único grupo, retornando apenas um valor global. Por exemplo, SELECT COUNT(Estado) FROM Time; retornaria o total de times, sem separar por Estado. Já com GROUP BY Estado, cada valor distinto de Estado vira um grupo, e o COUNT é calculado para cada um.

A pegadinha clássica da banca é confundir GROUP BY com ORDER BY ou HAVING. O ORDER BY apenas ordena o resultado, não agrupa. O HAVING filtra grupos após a agregação, mas exige que o GROUP BY já tenha sido usado. O WHERE filtra linhas antes da agregação, não pode ser usado com funções de agregação diretamente. Nesta questão, a alternativa correta é a única que combina COUNT com GROUP BY na coluna correta.

Funções de agregação SQL
  • 1COUNT
    • Conta linhas
    • Com GROUP BY: conta por grupo
  • 2SUM
    • Soma valores numéricos
  • 3MAX / MIN
    • Maior / menor valor
  • 4AVG
    • Média aritmética
  • 5Cláusulas
    • GROUP BY
      • Agrupa por valores distintos
      • Essencial com agregação
    • ORDER BY
      • Ordena resultado
      • Não agrupa
    • HAVING
      • Filtra grupos após agregação
      • Exige GROUP BY
    • WHERE
      • Filtra linhas antes da agregação
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A consulta SELECT COUNT(Estado), Estado FROM Time GROUP BY Estado; está correta porque:

  • COUNT(Estado) conta o número de registros (linhas) para cada grupo de Estado.

  • Estado é a coluna que será exibida junto com a contagem.

  • GROUP BY Estado agrupa as linhas pelos valores distintos da coluna Estado, fazendo com que o COUNT seja aplicado a cada grupo separadamente.

O resultado é uma tabela com duas colunas: o nome do Estado e o número de times daquele Estado. É exatamente o que o enunciado pede.

Alternativa B — ❌ Incorreta

A alternativa B usa SUM(Estado), que é uma função de agregação para somar valores numéricos. Como Estado é uma coluna de texto (string), SUM não faz sentido e resultaria em erro na maioria dos SGBDs. Além disso, usa ORDER BY Estado em vez de GROUP BY Estado, o que apenas ordenaria o resultado, sem agrupar. Para obter a contagem por Estado, seria necessário COUNT e GROUP BY.

Alternativa C — ❌ Incorreta

A alternativa C usa HAVING Estado IN Group, que é uma sintaxe inválida. A cláusula HAVING é usada para filtrar grupos após a agregação, mas exige uma condição lógica (ex.: HAVING COUNT(*) > 10). A expressão Estado IN Group não é uma condição válida, e Group não é um conjunto definido. Além disso, falta a cláusula GROUP BY, que é obrigatória para usar HAVING com agregação.

Alternativa D — ❌ Incorreta

A alternativa D usa MAX(Estado) - MIN(Estado), que calcula a diferença entre o valor máximo e o mínimo da coluna Estado. Como Estado é uma coluna de texto, essa operação não faz sentido (não é possível subtrair strings). Mesmo que fosse numérica, não retornaria a contagem de registros por Estado. A consulta não atende ao que o enunciado pede.

Alternativa E — ❌ Incorreta

A alternativa E usa NUMBER(Estado), que não é uma função de agregação padrão do SQL. A função correta para contar é COUNT. Além disso, a cláusula WHERE Estado IS NOT NULL apenas filtra linhas onde Estado não é nulo, mas não agrupa por Estado. Para obter a contagem por Estado, seria necessário COUNT e GROUP BY.

Gabarito: letra A

Link permanente: /questoes/vu195621