Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ajuda com uma consulta


Italo Peixoto

Pergunta

Galera to com uma seguinte consulta que não to conseguindo fazer, deixar eu passar a tabela:

CLIENTES = (Codigo numero (12), Cpf numero (11,0), Cnpj numero (13,0), Nome texto (40), Sexo texto (1), Logradouro texto (40), Numero texto (5), Bairro texto (40), Cep numero (8) ) ;

FRETES = (Numero numero(12), valor numero (9,2), Icms numero (7,2), Data data(), Endereço de Entrega(Logradouro texto (40), Numero texto (5), Bairro texto (40), Cep numero (8)),

Endereo de Origem (Logradouro texto (40), Numero texto (5), Bairro texto (40), Cep numero (8)),

CodigoRemetente numero(12,0), CodigoDestinatario numero(12,0),

CodigoCidadeOrigem numero (5,0), CodigoCidadeDestino numero (5,0)

);

Onde os negritos são chaves primárias, e os itálicos e sublinhados sãok FRK...

o problema e que a consulta tem que retornar a lista dos clientes que contrataram os fretes de maior valor, código do cliente, o nome e o

valor do frete, só que eu não to conseguindo pois podem ocorre de o maior valor de frete pode ocorrer mais de uma vez....

Ex: Acucar 50.00 e Sal 50.00

dai eu tinha que pegar esses dois valores... =// isso no mysql..

se alguém poder da uma ajuda serei muito grato..

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Oi Denis tudu bom??

valeu pela atenção..

olha eu fiz isso..

Select clientes.clientes_codigo, clientes.clientes_nome, 
fretes.Codigo_Remetente, MAX(fretes.fretes_valor) AS 'MAIOR VALOR'       
FROM clientes, fretes
WHERE fretes.Codigo_Remetente = clientes.clientes_codigo
group BY clientes.clientes_codigo, clientes.clientes_nome;

Ele tinha que retornar simplismento só a pessoa ou as pessoas que fizeram o frete mais caro e não to dando conta =/

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Italo!

Vamos por partes:

Primeiro você quer saber o maior valor de frete. O comando é esse:

SELECT MAX(fretes_valor) FROM fretes
Segundo, você quer saber quais pessoas fizeram o frete mais caro. Juntando o que você fez com a dica que passei acima e dando uma pequena corrigida, temos:
Select clientes.clientes_codigo, clientes.clientes_nome, 
fretes.Codigo_Remetente, fretes.fretes_valor AS 'MAIOR VALOR'       
FROM clientes 
INNER JOIN fretes ON fretes.Codigo_Remetente = clientes.clientes_codigo
WHERE fretes.fretes_valor = (SELECT MAX(fretes_valor) FROM fretes);

Se o volume de dados for grande, então haverá a necessidade de criar um índice pelo campo fretes_valor na tabela fretes.

Link para o comentário
Compartilhar em outros sites

  • 0

Denis muito obrigado mesmo amigo... ajeitei aqui o codigo ficou assim oh..

SELECT clientes.clientes_codigo AS 'CODIGO DO CLIENTE', 
       fretes.fretes_numero AS 'CODIGO DO FRETE',
       clientes.clientes_nome AS 'NOME DO CLIENTE',
       fretes.fretes_valor AS 'VALOR DO FRETE'      
FROM   clientes
INNER JOIN fretes ON 
      fretes.Codigo_Remetente = clientes.clientes_codigo
WHERE 
      fretes.fretes_valor = (SELECT MAX(fretes_valor) FROM fretes);

o que precisar pode falar comigo..

abraço! :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0

Denis mais uma perguntinha, se eu quisesse listar os nomes dos clientes que foram remetentes porém nunca destinatário esse codigo serviria?

SELECT clientes.clientes_nome AS 'CLIENTES'
FROM clientes, fretes
WHERE 
clientes.clientes_codigo = fretes.Codigo_Remetente
AND
clientes.clientes_codigo NOT IN (fretes.Codigo_Destinatario);

porque para mim eu acho que tá certo pórem ele só está fazendo a primeira validação.. a segunda ele não ta fazendo.. séra se e porque o fretes.Codigo_Destinatario e um chave estrangeira de clientes.clientes_codigo???

Link para o comentário
Compartilhar em outros sites

  • 0

Italo,

É quase isso. Segue o mesmo reciocínio do anterioir.

SELECT c.clientes_nome AS 'CLIENTES'
FROM clientes c 
INNER JOIN fretes f ON f.Codigo_Remetente = c.clientes_codigo
WHERE 
   clientes.clientes_codigo NOT IN (SELECT Codigo_Destinatario FROM fretes);

Link para o comentário
Compartilhar em outros sites

  • 0
Estou intendendo.. sempre quando for relacionar duas tabelas e bom sempre usar esse INNER JOIN é??

abraço meu amigoo ;)

O jeito que focê faz também é correto. Eu prefiro escrever explicitamente o INNER JOIN por uma questão didática. Por facilitar o entendimento, separando os comandos de forma correta.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...