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
qa538177
Banca
FUNDATEC
Órgão
CAU RS
Ano
2023
Cargo
Ana Sup ( )
PROJETO
IDDESCRICAOTIPOPRAZO_EXECUCAO_DIAS
1DecoraçãoA110
2MarcenariaB275
3ElétricaA360
4AlvenariaC1120
5RevestimentosC2105
6HidráulicaA345
 

Quantas linhas serão retornadas com a execução do comando SQL abaixo?

 

SELECT TIPO, COUNT(*)

FROM PROJETO

GROUP BY TIPO

ORDER BY COUNT(*) DESC;

  1. A1.
  2. B2.
  3. C3.
  4. D4.
  5. E5.
Revelar gabarito e comentário

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

Resolução

Gabarito: letra E — a conta chega a 5 linhas — alternativa E.

A ideia por trás

O comando GROUP BY é uma cláusula do SQL que agrupa linhas que têm o mesmo valor em uma ou mais colunas. Quando usado com funções de agregação como COUNT, SUM, AVG, MAX e MIN, ele permite calcular um valor resumido para cada grupo. No caso, COUNT(*) conta quantas linhas existem em cada grupo. O ORDER BY apenas ordena o resultado final, mas não altera a quantidade de linhas retornadas.

A consulta SELECT TIPO, COUNT() FROM PROJETO GROUP BY TIPO ORDER BY COUNT() DESC agrupa os registros por cada valor distinto da coluna TIPO. Para cada grupo, COUNT() conta o número de linhas daquele grupo. O ORDER BY COUNT() DESC ordena os grupos pela contagem em ordem decrescente, mas isso não muda o número de grupos. O número de linhas retornadas é igual ao número de grupos formados, ou seja, o número de valores distintos na coluna TIPO.

Esta questão cobra exatamente a diferença entre o número de registros na tabela e o número de grupos formados pelo GROUP BY. A pegadinha é que muitos candidatos contam o total de registros (6) em vez de contar os valores distintos de TIPO (5).

O que a questão dá

  • tabela PROJETO com 6 registros

  • coluna TIPO com valores: A1, B2, A3, C1, C2, A3

  • comando SQL: SELECT TIPO, COUNT() FROM PROJETO GROUP BY TIPO ORDER BY COUNT() DESC

O que queremos: quantas linhas o comando SQL retorna

Passo 1 — Listar os valores distintos de TIPO

O GROUP BY agrupa as linhas por cada valor distinto da coluna TIPO. Para saber quantas linhas a consulta retorna, precisamos primeiro identificar quantos valores diferentes existem nessa coluna.

A1,B2,A3,C1,C2\boxed{\text{A}1, \text{B}2, \text{A}3, \text{C}1, \text{C}2}
NÃO CAIA NESSA!

Contar os registros da tabela (6) em vez de contar os valores distintos. O valor A3 aparece duas vezes, mas é um único grupo.

Passo 2 — Contar quantos grupos foram formados

Cada valor distinto de TIPO vira um grupo. O COUNT(*) conta quantas linhas há em cada grupo, mas o número de linhas retornadas é o número de grupos, não a soma das contagens.

5 grupos\boxed{5\ \text{grupos}}
NÃO CAIA NESSA!

Somar as contagens (1+2+1+1+1 = 6) e achar que a consulta retorna 6 linhas. O resultado tem uma linha por grupo, não por registro.

Passo 3 — Entender o efeito do ORDER BY

O ORDER BY COUNT(*) DESC apenas ordena os grupos pela contagem em ordem decrescente. Ele não cria nem remove grupos, então o número de linhas retornadas continua sendo o número de grupos.

5 linhas\boxed{5\ \text{linhas}}
NÃO CAIA NESSA!

Achar que o ORDER BY altera a quantidade de linhas. Ele só muda a ordem de exibição.

Resposta: 5 linhas — alternativa E

Link permanente: /questoes/qa538177