Analise o comando SQL que João produziu. select Tipo, sum(Q...
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
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