SóProvas


ID
3260128
Banca
Colégio Pedro II
Órgão
Colégio Pedro II
Ano
2019
Provas
Disciplina
Banco de Dados
Assuntos

Em um banco de dados relacional, foi criada a seguinte tabela, denominada TabInfo:

Codigo Nome Data Quantidade

00001 Alessandra 25052002 2,50

00002 Bruno 27062002 2,00

00003 Marcos 23052002 3,60

00004 Bruno 18092003 3,80

Foi dado então um comando SQL que levou ao seguinte resultado:

Codigo Nome Data Quantidade

00004 Bruno 18092003 5,80

00003 Marcos 23052002 3,60

00001 Alessandra 25052002 2,50

Assinale a alternativa que apresenta o comando capaz de gerar este resultado.

Alternativas
Comentários
  • Observem que inicial temos 4 registros, entretanto a consulta resulta 3 registros, ok? Mas onde está o outro registro que 'sumiu'? Ele foi agrupado! São eles:

    .....

    00002 Bruno 27062002 2,00

    .....

    00004 Bruno 18092003 3,80

    Foi agrupado em um único registro:

    Codigo Nome Data Quantidade

    00004 Bruno 18092003 5,80

    Perceberam? EXATO!!

    Houve uma soma no atributo quantidade, para encontrar o gabarito encontre uma alternativa que exista um sum(quantidade).

    GABARITO ALTERNATIVA A

    Obs.: obviamente a alternativa b não poderia ser, embora ela tenha uma função sum(quantidade) ela é um operação de inserção INSERT INTO e não um select

  • Não existe resposta certa.

    veja na prática: http://sqlfiddle.com/#!9/2cda76/2

    A questão queria agrupar os registros de Bruno, porém, o script da alternativa dada como certa agrupou por código e nome: group by Codigo, Nome. Contudo, não existe registro com o mesmo código.

    00001 Alessandra 25052002 2,50

    00002 Bruno 27062002 2,00

    00003 Marcos 23052002 3,60

    00004 Bruno 18092003 3,80

    O script estaria correto se Bruno tivesse o mesmo código nos dois registros. OU, se omitisse o código na agregação (group by).

    Exemplo:

    SELECT Nome, min(Data) Data, sum(Quantidade) Quantidade FROM TabInfo GROUP BY Nome

    Deu para acertar a questão porque as demais alternativas estavam com erro mais "gritante".

    B) INSERT INTO TabInfo VALUES Codigo, Nome, max(Data) Data, sum(Quantidade) Quantidade GROUP BY Codigo, Nome.

    Na alterativa B, o script não faz uma projeção mas um insert na tabela TabInfo. Além disse, tá pegando a maior data Max(data). Na questão, o resultado trouxe para Bruno a data = 23052002, que é a menor data. Com isso já podemos descartar essa opção.

    C) SELECT Codigo, Nome, Tamanho, Quantidade FROM TabInfo WHERE Data=max AND Quantidade=sum.

    O primeiro erro é usar a coluna Tamanho, ela não existe na tabela.

    Além disso, a sintaxe não existe. As funções exigem a coluna entre os parentes, ex.: max(), e não podem ser usadas na condição where. devem ser usadas com HAVING. mais ou menos assim:

    SELECT Nome, sum(Quantidade) QTD FROM tableInfor

    group by Nome

    having max(data) = '18092003' and sum(quantidade) = 5.80

    Obs.: o script acima foi um exemplo de uso do HAVING, e não representa o resultado que a questão pede.

    D) SELECT Codigo, Nome, count(Data) Data, max (Quantidade) Quantidade FROM TabInfo GROUP BY Codigo, Nome, Data, Quantidade.

    Esta alternativa está contando quantos registros agrupados na coluna Data e qual a maior quantidade.

    Se não houvesse o erro do group by codigo. o resultado seria esse:

    1 Alessandra 1 2.50

    2 Bruno 2 3.80

    3 Marcos 1 3.60