Ir ao conteúdo
  • Cadastre-se

MySQL como ordernar um nome no mysql?


Posts recomendados

Olá pessoas!

Meu problema é o seguinte:

Tenho um Banco de Dados com a tabela Produtos, nessa tabela, eu tenho que calcular o gasto por produto e retornar o que eu tive mais gasto.
Até ai ok.

O problema que a questão me pede, é que caso eu tenha dois ou mais produtos que o gasto tenha sido o mesmo, o MySql tem que retornar a coluna que tem a menor ordem lexicográfica,

ou seja, cenoura e chocolate:
Retornaria cenoura porque 'e' < 'h'.

 

Como no exemplo abaixo:

ex.jpg

Link para o comentário
Compartilhar em outros sites

  • Moderador

@CPD_Washingthon O que você entende por ordem lexicográfica? 

Pelo que eu me lembro, é apenas ordem alfabética. 

Portanto, pesquise como implementar a clausula "order by" além disso.. se o exercício pede que mostre apenas um resultado, você vai precisar limitar.

NO mais... por gentileza, poste como tentou fazer.

 

Link para o comentário
Compartilhar em outros sites

@DiF Então, o que eu entendo como ordem lexicográfica é a ordem alfabética, só que o que eu não entendi ainda, é como "limitar" o tamanho da palavra.

Por exemplo as palavras cenoura e chocolate: como fazer o SQL entender que cenoura por ter a segunda letra a letra 'e' é menor que chocolate que tem a letra 'h' na segunda posição.

Eu ainda não consegui fazer, mas pelo que eu pesquisei, eu teria que usar as cláusulas group by para agrupar por nome e maior gasto, e a order by asc para ordenar alfabeticamente....   

Link para o comentário
Compartilhar em outros sites

  • Moderador

@CPD_Washingthon Então.. Pelo que me lembro só há uma forma de limitar resultados no SQL. Talvez haja outra forma,  como por exemplo criar alguma store procedure ou algo assim.. mas  de forma simples. eu creio que o mysql já faz os cálculos necessários para determinar qual é a ordem alfabética e  dar o nome e o maior gasto... enfim..

 

Posta aqui uma tentativa de resolução..  só assim poderemos corrigir ou dar outras alternativas de resolução.. o importante é que você tente primeiro.

O que eu posso dizer no momento é que pelos meus testes, só usei uma clausula e obtive o resultado que espera. 

Link para o comentário
Compartilhar em outros sites

@DiF O que eu consegui fazer até o momento foi apenas isso:

 

select name, max(price * quantity) as H_price from Products

    order by name;

 

tentei o group by também, mas não deu certo.

 

Ai você vê que quando os itens tem o mesmo valor total, que no caso é 40,ele retorna o tomato, quando era pra ser o cucumber, saca?


image.thumb.png.824e9cb23ec8221dfc1b4eef80c0e663.png
 

Link para o comentário
Compartilhar em outros sites

  • Moderador
SELECT name FROM Products WHERE (quantity * price) ORDER BY name LIMIT 1

 

Tenta dessa forma. Pelo  menos no meu teste funcionou assim.

 

Veja no meu teste:

 

Captura de tela 2021-04-10 063724.png

 

PS: como eu disse antes, não sei se essa é a melhor maneira de resolver isso, mas pelo teste funcionou.. veja quando faz o cálculo, 4 tomatos com preço de 10, dá 40. 

5 Cucumber com preço de 8, também dá 40.  .. 2 red pepper com preço de 20 dá 40, apenas 1 Feta vale 40. 

Mas pelo que eu fiz, se ordenar por "name"  e adicionar o LIMIT 1, você limita o sql a mostrar apenas 1 única resposta, e essa resposta é em order alfabética(ordem lexicográfica) porque C, vem antes de T,  R e F.  Por isso mesmo que todos no fim deem o valor final em 40,  o cucumber sempre será mostrado.

 

Além disso, olha bem pra sua imagem. Tá mostrando:

Output: 

 Name   H_price
 tomato   40

 

mais embaixo diz:

 

Expected output:

name
Cucumber

 

Ou seja, ele só quer que você mostre o nome e não valor junto.

Em outras palavras, ele quer que você mostre apenas o nome do produto, na qual o valor final seja 40, em order alfabética, e apenas 1. 

 

Então, pode ficar assim a resposta:

 

CREATE PROCEDURE mostExpensive()
BEGIN
   SELECT name FROM Products WHERE (quantity * price) ORDER BY name LIMIT 1;
END   

 

Mas não sei se realmente é para criar essa procedure... pelo menos no meu teste ali no SQL Fiddle, aceitou apenas a instrução SQL.

Note que você seleciona o "nome" do produto, ONDE, o cálculo é a quantidade vezes o preço.

Ou seja, a clausula de pesquisa para achar o nome deve ser o cálculo de multiplicação. 

Bem, esse é o máximo que eu posso ajudar.. rsrs 

abraço

 

Link para o comentário
Compartilhar em outros sites

@DiF Noicee!

Ajudou demais!

 

Esse procedure() acho que tem mais haver com a plataforma de onde tá o desafio.
Eu vou testar do jeito que você fez e vou ver se passou nos testes.

Ai eu volto aqui pra falar.

@DiF

 

Passou em 2/3 e  o 3, pra nossa alegria, é hidden...

 

image.thumb.png.7c9af63bc1a87e2c12ae35c8e2d39253.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!