Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Esta dando um erro estranho aqui no comando ORDER BY

Estava aqui testando o código da aula e percebi uma falha que não consegui entender o porque dos resultados, pelo que entendi usando o "ORDER BY coluna escolhida DESC;" deveria devolver pra gente o resultado em ordem do maior pro menor certo? Entao teria que me retornar por exemplo os que deram 7, depois 6, depois 5.....1 certo?

SELECT cliente_id, AVG(DATEDIFF(data_fim, data_inicio)) AS media_dias_estadia
FROM alugueis
GROUP BY cliente_id
ORDER BY media_dias_estadia DESC;

fiz o codigo exatamente igual o da aula e só me retornou media 7... nao teve um com nota menor... até aí eu imaginei que todos ali poderiam ter a media de 7 dias... por conta pesquisei como faria pra ser em ordem ascendente, ou seja, do menor para o maior e descobri que para ordem ascendente seria trocar o DESC por ASC.

SELECT cliente_id, AVG(DATEDIFF(data_fim, data_inicio)) AS media_dias_estadia
FROM alugueis
GROUP BY cliente_id
ORDER BY media_dias_estadia ASC;

Porém deveria me retornar o mesmo valor de DESC ja que todos tinham a média de 7 dias, porém ele me retornou todos com a media de 1 dia!! ??

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeProcurei pra ver se iria aumentando e agora ao inves de todos 7, estava todos com 1.... alguem pode me explicar o motivo desse resultado... agora nao sei se esse comando "AVG(DATEDIFF "realmente funciona... pq deu dois resultados diferentes mudando apenas a ordem que eu queria que ele exibisse o resultado...

EDIT: Eu testei na tabela do exercicio anterior, (no exemplo da tabela alugueis) e a impressao que me deu é que embora eu nao tenha colocado nenhum limite no resultado, ele nao carrega o resultado tabela inteira... pois no exemplo que testei aqui, quando coloco em ordem descendente, ele aparece que o maior valor lá é 7000,00 e se vc descer ate o final, o menor apresentado ali é 4697,00, mas se inverto para ascendente, ele começa 102,00 e qndo vou até o ultimo resultado ali é 486,00 (e deveria ser lá os 7000,00)

SELECT cliente_id, AVG(preco_total) AS ticket_medio
FROM alugueis
GROUP BY cliente_id
ORDER BY ticket_medio DESC;
SELECT cliente_id, AVG(preco_total) AS ticket_medio
FROM alugueis
GROUP BY cliente_id
ORDER BY ticket_medio ASC;

alguem sabe o porque disso acontecer? eu nao estou usando LIMIT como podem observar nos codigos acima...

3 respostas

Acabei esquecendo de postar, mas usando o DESC o resultado fica assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oii, André! Como vai?

Agradeço por aguardar o nosso retorno.

Como podemos ler neste artigo usamos o ASC para classificar do valor menor para o maior e o DESC para classificar do valor maior para o menor.

Ao usar o DESC o retorno será de 7 como vimos em aula, o resultado da média de dias que os clientes fecham o pacote. E quando aplica o ASC temos o retorno da média mínima, que é de 1 dia, que os clientes fecham o pacote. Como estamos trabalhando com médias, então o retorno virá com um número da média e não como contagem descendente ou ascendente sequencial.

Espero ter ajudado com a explicação, qualquer dúvida compartilhe no fórum.

Bons estudos e até mais!

solução!

Ah sim, mas no caso a minha duvida era referente ao porque o programa MySQL Workbench nao estava retornando todos os resultados e sim apenas uma parte deles. Eu acabei descobrindo nesse meio tempo que o MySQL Workbench embora ele leia todo o banco de dados e calcule ali as médias por exemplo, ele não exibe para a pessoa mais que 1000 resultados do banco de dados (se o banco de dados por exemplo tiver 2000 dados cadastrados, na consulta ele só exibe os 1000 primeiros conforme o order by que voce selecionar), por esse motivo que estava apenas mostrando resultado tudo 7 e nao mostrava os resultados menores q 7 por exemplo ou quando eu invertia a ordem na consulta nao apresentava tudo, pq ele estava mostrando apenas os primeiros 1000 resultados. Eu fiz depois um script em python pra fazer a consulta em mysql e ai ele retornou todos os dados do Banco de dados na ordem em que coloquei. Pelo que descobri é um limite no workbench mesmo que tem, que inclusive da para aumentar essa quantidade de exibição....

Insira aqui a descrição dessa imagem para ajudar na acessibilidade