Questão nº 63

Questão de Tecnologia da Informação · FGV SMF-RJ 2023 - Manhã (P1) (nº 63)

FGV2023Fiscal de RendasTecnologia da Informação
Gabarito: Ever comentário ↓

Considere a existência de uma tabela relacional N, com apenas uma coluna, intitulada numero, contendo os números inteiros de 1 até 100, um em cada linha, como ilustrada a seguir.

Figura da questão de Tecnologia da Informação

\

Como pode haver discrepâncias entre implementações da linguagem SQL, é dado que a função sqrt(x) retorna a raiz quadrada de x e que a expressão a % b retorna o resto da divisão inteira de a por b.


Este é o resultado produzido por um determinado script SQL que utiliza a tabela N, anteriormente descrita.

Figura da questão de Tecnologia da Informação

Abaixo, são apresentadas três versões para o referido script, não necessariamente corretas.

Figura da questão de Tecnologia da Informação

Sobre essas afirmativas, é correto afirmar que:

Resposta comentada

Gabarito Alternativa E

O agrupamento (GROUP BY) em SQL permite combinar linhas com valores idênticos em uma ou mais colunas, aplicando funções de agregação (como COUNT para contar) a cada grupo. Filtros podem ser aplicados antes do agrupamento com WHERE ou depois do agrupamento com HAVING. Funções como CAST(... AS INT), FLOOR(), e TRUNCATE(..., 0) são usadas para obter a parte inteira de um número. Para números positivos, como as raízes quadradas aqui, essas três funções geralmente produzem o mesmo resultado, que é a parte inteira do número.

  • (A) Incorreta: Esta alternativa está incorreta porque, como será demonstrado, todas as três versões do script produzem o resultado correto.
  • (B) Incorreta: Esta alternativa está incorreta porque não apenas I e II, mas também a versão III, produzem o resultado correto.
  • (C) Incorreta: Esta alternativa está incorreta porque não apenas II e III, mas também a versão I, produzem o resultado correto.
  • (D) Incorreta: Esta alternativa está incorreta porque não apenas a versão III, mas também as versões I e II, produzem o resultado correto.
  • (E) Correta: Todas as três versões do script produzem o resultado correto.
    • A Versão I usa CAST(sqrt(numero) AS INT) para obter a parte inteira da raiz quadrada e filtra as linhas com WHERE CAST(sqrt(numero) AS INT) < 10 antes do agrupamento, excluindo o número 100 (cuja raiz quadrada inteira é 10).
    • A Versão II usa FLOOR(sqrt(numero)) para a parte inteira e filtra os grupos com HAVING FLOOR(sqrt(numero)) < 10 após o agrupamento. Embora o filtro ocorra em uma etapa diferente, o resultado final é o mesmo: o grupo para a raiz quadrada inteira 10 é excluído.
    • A Versão III usa TRUNCATE(sqrt(numero), 0) para a parte inteira e filtra as linhas com WHERE TRUNCATE(sqrt(numero), 0) < 10 antes do agrupamento. Para números positivos, TRUNCATE(x, 0) é equivalente a FLOOR(x) e CAST(x AS INT).
      Em resumo, as três funções (CAST(... AS INT), FLOOR(), TRUNCATE(..., 0)) agem de forma idêntica para obter a parte inteira de números positivos, e tanto o WHERE quanto o HAVING conseguem filtrar o valor 10 (correspondente ao número 100) de forma a produzir o resultado desejado. A "pegadinha" seria pensar que as pequenas diferenças entre as funções ou entre WHERE/HAVING levariam a resultados distintos neste cenário específico.

Fonte: FGV SMF-RJ 2023 - Manhã (P1) Fiscal de Rendas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho