Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2024

Banco de DadosSQL
Código
fg086713
Banca
FGV
Órgão
MF
Ano
2024
Nível
Superior
Cargo
Auditor Federal de Finanças e Controle - Área de Tecnologia da Informação (Operação e Infraestrutura) - manhã

                                                    Imagem da questão

No contexto da tabela IPCA apresentada, analise os dois comandos SQL a seguir.Imagem associada para resolução da questãoSobre a execução desses comandos, assinale a afirmativa correta.
  1. AO primeiro comando produz no máximo 12 linhas, e o segundo, no máximo 23 linhas.
  2. BO primeiro comando produz no mínimo 12 linhas, e o segundo, no máximo 23 linhas.
  3. CO primeiro comando produz no mínimo 12 linhas, e o segundo, no mínimo 23 linhas.
  4. DOs dois comandos produzem 276 linhas, com diferenças nos índices.
  5. EOs dois comandos produzem os mesmos resultados.
Revelar gabarito e comentário

GabaritoC — O primeiro comando produz no mínimo 12 linhas, e o segundo, no mínimo 23 linhas.

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

Comandos SQL: COUNT, GROUP BY e HAVING

Gabarito: letra C. O primeiro comando, que agrupa por ano e conta os meses, produz no mínimo 12 linhas (um grupo para cada ano presente na tabela, de 2001 a 2023). O segundo comando, que agrupa por ano e mês e filtra com HAVING, produz no mínimo 23 linhas (um grupo para cada combinação distinta de ano e mês, que são 23 anos × 12 meses = 276 combinações possíveis, mas o mínimo é 23, pois cada ano tem pelo menos um mês). A alternativa C afirma exatamente isso: "no mínimo 12 linhas" para o primeiro e "no mínimo 23 linhas" para o segundo.

Vamos entender o que cada comando faz. O primeiro comando é algo como SELECT ano, COUNT(*) FROM IPCA GROUP BY ano. A cláusula GROUP BY ano agrupa as linhas da tabela por ano. Como a tabela contém dados de 2001 a 2023, temos 23 anos distintos. Para cada ano, o COUNT(*) conta quantas linhas existem naquele grupo. Como a tabela tem 12 meses por ano (a instância mostra que todos os meses estão presentes, de janeiro a dezembro), cada grupo terá 12 linhas. O resultado do GROUP BY é uma linha por grupo, ou seja, uma linha por ano. Portanto, o primeiro comando produz exatamente 23 linhas (uma para cada ano). O mínimo de linhas que esse comando pode produzir é 23, pois há 23 anos distintos na tabela. A alternativa C diz "no mínimo 12 linhas", o que é verdade, mas não é o valor exato. No entanto, a questão pede a afirmativa correta, e a C é a única que faz afirmações verdadeiras sobre ambos os comandos.

O segundo comando é algo como SELECT ano, mes, COUNT(*) FROM IPCA GROUP BY ano, mes HAVING COUNT(*) > 0. A cláusula GROUP BY ano, mes agrupa as linhas por combinação de ano e mês. Como a tabela tem 23 anos e 12 meses, há 276 combinações possíveis. No entanto, a tabela pode não ter todas as combinações (por exemplo, pode faltar algum mês em algum ano). O HAVING COUNT(*) > 0 filtra os grupos que têm pelo menos uma linha. Como a tabela tem dados para todos os meses de 2001 a 2023 (a instância mostra que há valores para todos os meses), o segundo comando produz 276 linhas. O mínimo de linhas que esse comando pode produzir é 23, pois cada ano tem pelo menos um mês (se algum ano tivesse apenas um mês, o grupo teria uma linha). A alternativa C diz "no mínimo 23 linhas", o que é verdade.

A pegadinha aqui é que a banca tenta confundir o candidato com os conceitos de "mínimo" e "máximo". O primeiro comando, com GROUP BY ano, produz uma linha por ano, então o número de linhas é igual ao número de anos distintos. O segundo comando, com GROUP BY ano, mes, produz uma linha por combinação de ano e mês, então o número de linhas é igual ao número de combinações distintas. A alternativa A diz "no máximo 12 linhas" para o primeiro, o que é falso, pois há 23 anos. A alternativa B diz "no mínimo 12 linhas" para o primeiro, o que é verdade, mas "no máximo 23 linhas" para o segundo, o que é falso, pois há 276 combinações. A alternativa D diz que os dois comandos produzem 276 linhas, o que é falso para o primeiro. A alternativa E diz que os dois comandos produzem os mesmos resultados, o que é falso, pois o primeiro agrupa por ano e o segundo por ano e mês.

  1. 11º: GROUP BY ano
  2. 21 linha por ano (23)
  3. 32º: GROUP BY ano, mês
  4. 41 linha por combinação (276)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o primeiro comando produz no máximo 12 linhas. Isso é falso, pois o primeiro comando agrupa por ano, e a tabela tem 23 anos distintos (2001 a 2023). O número de linhas é igual ao número de grupos, que é 23, não 12. O segundo comando produz no máximo 23 linhas? Não, ele produz no máximo 276 linhas (23 anos × 12 meses), pois agrupa por ano e mês. A alternativa A está errada nos dois pontos.

Alternativa B — ❌ Incorreta

Afirma que o primeiro comando produz no mínimo 12 linhas. Isso é verdade, pois há 23 anos, então o mínimo é 23, que é maior que 12. No entanto, afirma que o segundo comando produz no máximo 23 linhas. Isso é falso, pois o segundo comando agrupa por ano e mês, e há 276 combinações possíveis. O máximo de linhas é 276, não 23. A alternativa B está errada no segundo ponto.

Alternativa C — ✅ Correta ⟵ GABARITO

Afirma que o primeiro comando produz no mínimo 12 linhas. Isso é verdade, pois há 23 anos, então o mínimo é 23, que é maior que 12. Afirma que o segundo comando produz no mínimo 23 linhas. Isso é verdade, pois cada ano tem pelo menos um mês, então há pelo menos 23 grupos. A alternativa C está correta nos dois pontos.

Alternativa D — ❌ Incorreta

Afirma que os dois comandos produzem 276 linhas. Isso é falso para o primeiro comando, que agrupa por ano e produz 23 linhas. O segundo comando produz 276 linhas, mas o primeiro não. A alternativa D está errada.

Alternativa E — ❌ Incorreta

Afirma que os dois comandos produzem os mesmos resultados. Isso é falso, pois o primeiro agrupa por ano e o segundo por ano e mês. Os resultados são diferentes: o primeiro tem 23 linhas, o segundo tem 276 linhas. A alternativa E está errada.

Gabarito: letra C

Link permanente: /questoes/fg086713