Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
vu212082
Banca
VUNESP
Órgão
Pref Piracicaba
Ano
2024
Cargo
Adm ( )

Considere a seguinte tabela de um banco de dados relacional:

 

Produto (ID, Nome, Tipo, Descrição)

 

O comando SQL para obter o número de produtos, agrupados por Tipo é:

  1. ASELECT Tipo, COUNT (Tipo) FROM Produto;
  2. BSELECT Tipo, COUNT (Tipo) FROM Produto GROUP BY Tipo;
  3. CSELECT Tipo, SUM (Tipo) FROM Produto CLUSTER BY Tipo;
  4. DSELECT Tipo, SUM (Tipo) FROM Produto;
  5. ESELECT Tipo, Count (Tipo) FROM Produto CLUSTER IN Tipo;
Revelar gabarito e comentário

GabaritoB — SELECT Tipo, COUNT (Tipo) FROM Produto GROUP BY Tipo;

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

SQL: agrupamento com GROUP BY e função de agregação COUNT

Gabarito: letra B. Para obter o número de produtos agrupados por Tipo, o comando SQL correto é SELECT Tipo, COUNT(Tipo) FROM Produto GROUP BY Tipo; — a cláusula GROUP BY é obrigatória para agrupar os registros por um atributo e, assim, permitir que a função de agregação COUNT conte quantos produtos existem em cada grupo. As demais alternativas ou omitem o agrupamento (A e D), ou usam a função errada SUM (C e D), ou utilizam cláusulas inexistentes como CLUSTER BY e CLUSTER IN (C e E).

A linguagem SQL (Structured Query Language) é a linguagem padrão para acesso e manipulação de bancos de dados relacionais. Ela é declarativa: o usuário especifica o que deseja obter, sem precisar dizer como o banco deve executar a consulta. Dentro do SQL, 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 são COUNT, SUM, AVG, MAX e MIN. A função COUNT retorna o número de linhas que atendem a um critério — pode contar todas as linhas de uma tabela (COUNT(*)) ou contar os valores não nulos de uma coluna específica (COUNT(coluna)).

Quando se deseja obter um valor agregado por grupo (por exemplo, o número de produtos de cada tipo), é necessário usar a cláusula GROUP BY. Ela agrupa as linhas que têm o mesmo valor em uma ou mais colunas, e a função de agregação é aplicada a cada grupo separadamente. A sintaxe básica é:

SELECT coluna, FUNCAO_AGREGACAO(coluna)
FROM tabela
GROUP BY coluna;

No caso da questão, queremos o número de produtos agrupados por Tipo. A consulta correta é:

SELECT Tipo, COUNT(Tipo)
FROM Produto
GROUP BY Tipo;

Essa consulta retorna uma linha para cada tipo de produto, com a contagem de produtos daquele tipo. Por exemplo, se a tabela Produto tiver 3 produtos do tipo "Eletrônico" e 2 do tipo "Móvel", o resultado será:

Tipo

COUNT(Tipo)

Eletrônico

3

Móvel

2

É importante distinguir GROUP BY de outras cláusulas:

  • WHERE: filtra linhas antes do agrupamento. Não pode ser usada com funções de agregação.

  • HAVING: filtra grupos depois do agrupamento. Pode ser usada com funções de agregação.

  • ORDER BY: ordena o resultado final.

A pegadinha da banca está em usar SUM em vez de COUNT e em inventar cláusulas como CLUSTER BY e CLUSTER IN, que não existem no SQL padrão. SUM é usada para somar valores numéricos de uma coluna, não para contar linhas. E CLUSTER não é uma cláusula SQL para agrupamento — é um conceito de organização física de dados em alguns SGBDs, mas não faz parte da sintaxe de consulta.

Guarde a distinção: para contar registros, use COUNT; para somar valores, use SUM. E para agrupar, use GROUP BY. É exatamente essa combinação que separa a alternativa correta das incorretas.

Alternativa A — ❌ Incorreta

SELECT Tipo, COUNT(Tipo) FROM Produto; — falta a cláusula GROUP BY Tipo. Sem ela, a consulta tenta retornar uma única linha com o Tipo e a contagem total, o que é um erro de sintaxe na maioria dos SGBDs (a coluna Tipo não está agregada nem agrupada). O correto é agrupar por Tipo para obter a contagem por grupo.

Alternativa B — ✅ Correta ⟵ GABARITO

SELECT Tipo, COUNT(Tipo) FROM Produto GROUP BY Tipo; — esta é a sintaxe correta. A cláusula GROUP BY Tipo agrupa os registros por tipo, e a função COUNT(Tipo) conta quantos produtos existem em cada grupo. O resultado é uma linha por tipo com o respectivo número de produtos.

Alternativa C — ❌ Incorreta

SELECT Tipo, SUM(Tipo) FROM Produto CLUSTER BY Tipo; — dois erros: (1) SUM é usada para somar valores numéricos, não para contar registros; (2) CLUSTER BY não é uma cláusula SQL válida para agrupamento em consultas. A cláusula correta é GROUP BY.

Alternativa D — ❌ Incorreta

SELECT Tipo, SUM(Tipo) FROM Produto; — dois erros: (1) SUM em vez de COUNT; (2) falta a cláusula GROUP BY Tipo. Sem o agrupamento, a consulta não faz sentido para retornar valores por tipo.

Alternativa E — ❌ Incorreta

SELECT Tipo, Count(Tipo) FROM Produto CLUSTER IN Tipo; — o uso de COUNT está correto, mas a cláusula CLUSTER IN não existe no SQL. A cláusula correta para agrupar é GROUP BY. Além disso, a sintaxe CLUSTER IN Tipo é inválida.

Gabarito: letra B — a única alternativa que combina corretamente a função de agregação COUNT com a cláusula GROUP BY para obter o número de produtos por tipo.

Link permanente: /questoes/vu212082