GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

O que estou fazendo errado , que não sai os valores na tabela ?

postgresql
Tags: #<Tag:0x00007fb39db3ece8>

#22

Isto não ajuda?

select l.nome, l.valor from locatorio l, aluguel al where l.idLocatorio = al.idLocatorio and data_inicio >= '01/03/2018' 
and data_fim <= '03/12/2018' and l.valor = (select max(valor) from locatorio lo, aluguel alu where lo.idLocatorio = alu.idLocatorio and data_inicio >= '01/03/2018' 
and data_fim <= '03/12/2018')

#23


#24

Veja se resolve:

SELECT l.nome FROM locatario l, (
    SELECT idLocatario, MAX(valor) FROM aluguel 
    WHERE data_inicio >= '01/03/2018' AND data_fim <= '03/12/2018'
) t WHERE l.idLocatario = t.idLocatario;

#25

deu certo nao


#26

Então não tem jeito vai ter que usar group by, ai vc limita em 1 no final

SELECT l.nome, MAX(al.valor) FROM locatario l, aluguel al 
WHERE l.idLocatario = al.idLocatario 
AND al.data_inicio >= '01/03/2018' AND al.data_fim <= '03/12/2018' 
GROUP BY l.nome ORDER BY MAX(al.valor) DESC LIMIT 1;

Obs: não tenho certeza se no postgres o MAX(al.valor) vai funcionar no ORDER BY mas não deixa de ser uma tentativa… boa sorte!


#27

funfou cara, obrigado ai


#28

Só não entendi por que tive que usar o order by ai .


#29

pra garantir o max do max entre os nomes agrupados, mesmo limitando 1, sem ele pode acontecer isso:

nome | valor
a    | 123
b    | 999

Nesse exemplo, limitando 1 o a será exibido e isso é errado, pq b é maior ainda,quando se usa o order desc vc inverte a ordem:

nome | valor
b    | 999
a    | 123

E limitando 1, o b será exibido, pegou? Macetes que só no dia a dia (leia-se necessidade) se aprende, sucesso nos estudos e pergunte ao professor sobre o cartesiano, vamos ver se ele vai saber responder ja que ele não deixou usar join, mas vc acabou usando mesmo assim…


#30

Pode me ajudar em outro ?


#31

Abre outro tópico jovem!


#32

abri ai já amigo .