Analise o comando SQL que João produziu. select Tipo, sum(Q...

Próximas questões
Com base no mesmo assunto
Q2287685 Banco de Dados
Analise o comando SQL que João produziu.
select Tipo, sum(Quantidade) Total from Venda where Quantidade is not null group by Tipo ...
Na linha pontilhada, João testou cinco opções para a cláusula order by, como segue.
(1) order by 2 (2) order by avg(Quantidade) (3) order by Quantidade (4) order by sum(Quantidade) (5) order by Total

Nesse caso são possíveis as opções
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: D - 1, 2, 4, 5, apenas.

Vamos analisar a questão e entender por que a alternativa correta é a D.

O comando SQL fornecido por João é:

select Tipo, sum(Quantidade) Total
from Venda
where Quantidade is not null
group by Tipo
...

Na linha pontilhada, João testou diferentes opções para a cláusula order by. Para resolver a questão, precisamos entender como a cláusula order by funciona e quais expressões são permitidas nesse contexto.

A cláusula order by é usada para ordenar o resultado de uma consulta SQL. Ela pode ordenar por:

  • Índice da coluna (número)
  • Nome da coluna
  • Expressões que utilizam agregações (como sum, avg)

Vamos analisar cada uma das opções testadas por João:

1. order by 2

Essa opção é válida porque ordena o resultado pela segunda coluna do SELECT, que é sum(Quantidade) Total.

2. order by avg(Quantidade)

Embora avg(Quantidade) não esteja presente no SELECT, ele é válido em order by pois é uma expressão de agregação, e o SQL permite ordenar os resultados por expressões complexas.

3. order by Quantidade

Esta opção é inválida porque Quantidade não é uma coluna na lista de seleção e não é uma expressão de agregação válida nesse contexto.

4. order by sum(Quantidade)

Essa opção é válida porque sum(Quantidade) é uma expressão de agregação e está presente no SELECT como Total.

5. order by Total

Essa opção é válida porque Total é um alias definido para sum(Quantidade) na lista de seleção.

Com essas considerações, as opções válidas são: 1, 2, 4 e 5. Portanto, a alternativa correta é a D.

Agora, vamos justificar por que as outras alternativas estão incorretas:

A - 1, 2, 3, 4, 5.

Incorreta porque inclui a opção 3, que é inválida.

B - 1, 2, 3, 4, apenas.

Incorreta porque inclui a opção 3 e exclui a opção 5.

C - 1, 4, 5, apenas.

Incorreta porque exclui a opção 2, que é válida.

E - 4, 5, apenas.

Incorreta porque exclui as opções 1 e 2, que são válidas.

Conclusão: A alternativa correta é a D porque inclui todas as opções válidas (1, 2, 4 e 5) e exclui a opção inválida (3).

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

http://www.sqlfiddle.com/#!9/213d0b/9

Testando as seleções no mysql, todos funcionam.

marquei apenas 1,4,5; letra C.

O gabarito comentado também fala que a 2 tá incorreta.

não entendi foi nada

É claro que a opção 3 esta correto. Esse gabarito está errado, seria a letra A.

A

1, 2, 3, 4, 5. acho que seria essa

d-

testando order by quant nao vai funcionar. devido ao group by Tipo.

regra do ora 00979 not a group by expression

The specified expression was not part of either the GROUP BY clause, an aggregate function, or a constant but appeared in a part of the query that is processed after the GROUP BY clause, such as the SELECT clause, the ORDER BY clause, or the HAVING clause.

https://docs.oracle.com/en/error-help/db/ora-00979/?r=23ai

se vai combinar group by com order by, tem que ter coerencia.

se houver clausula order by com coluna NAO MENCIONADA EM SELECT, o group by nao vai saber agrupar de acordo com essa coluna, porque ele estava esperando a coluna especificada no select. o group by aceita funções de agregação: avg, total, sum, count, mean, max, median etc

obs.: order by 2 significa um ordenamento pela 2° coluna especificada no select. seja ela qual for. por isso funciona com group by. como a 2°coluna é sum(Quantidade), uma função agregada, o cmd vai rodar

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo