Logo Hardware.com.br
Bbruno
Bbruno General de Pijama Registrado
3.2K Mensagens 102 Curtidas

[Resolvido] Dúvida para gerar SQL para retornar os registros com menores valores de produtos lançados..

#1 Por Bbruno 01/04/2016 - 20:30
Boa noite,

A ideia do sistema é cotação, preciso obter os menores registros de preços que os vendedores que estão participando da cotação lançaram para determinado produto.
Sem o GROUP BY os resultados são os seguinte (é possível observar quais valores são menores):

Imagem

Após o GROUP BY:

Imagem

O código SQL:

SELECT  CV.*, P.DESCRICAO, U.NOME
FROM COTACOES_VENDEDORES CV
JOIN USUARIOS U
ON U.ID = CV.FK_USUARIO_ID
JOIN COTACOES_PRODUTOS CP
ON CP.ID = CV.FK_COTACAO_PRODUTO_ID
JOIN PRODUTOS P
ON P.ID = CP.FK_PRODUTO_ID
JOIN COTACOES C
ON C.ID = CP.FK_COTACAO_ID
WHERE C.ID = 44
GROUP BY P.ID
ORDER BY CV.PRECO ASC


Com o group by teria que funcionar.. Mas não me mostra os menores preços cotados corretamente e a última coluna "NOME" que se refere ao nome do vendedor que cotou os preços sempre mostra o mesmo vendedor..
Será que errei em algum JOIN?




att
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
01/04/2016 - 22:09
Para ficar mais claro você poderia pelo menos exibir P.ID, e como depois do Group-by os produtos não repetiram mais então isto demonstra que ele fez o que deveria.
C.ID não é igual a CP.ID, assim não está visível se o critério de filtragem foi obedecido. Imprima C.ID.
Parece que há um problema com a ordenação, porque ela não funcionou em nenhuma das consultas mostradas.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
Bbruno
Bbruno General de Pijama Registrado
3.2K Mensagens 102 Curtidas
#3 Por Bbruno
01/04/2016 - 23:14
esquiloesperto disse:
Para ficar mais claro você poderia pelo menos exibir P.ID, e como depois do Group-by os produtos não repetiram mais então isto demonstra que ele fez o que deveria.
C.ID não é igual a CP.ID, assim não está visível se o critério de filtragem foi obedecido. Imprima C.ID.
Parece que há um problema com a ordenação, porque ela não funcionou em nenhuma das consultas mostradas.


C.ID está correto, faz referência a cotação de ID 44, que atribui manualmente apenas para testes, pois foi a última que lancei registros para testar.
Abaixo a imagem exibindo C.ID E P.ID:

Imagem


Imagem

PS.: A ordenação (asc) funciona sem o group, pois como pode ser visto os registros são mostrados em ordem crescente de preço de cada produto.





att
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#4 Por esquiloesper...
02/04/2016 - 02:31
O código SQL:

[code=sql]SELECT CV.*, P.DESCRICAO, U.NOME
FROM COTACOES_VENDEDORES CV
JOIN USUARIOS U
ON U.ID = CV.FK_USUARIO_ID
JOIN COTACOES_PRODUTOS CP
ON CP.ID = CV.FK_COTACAO_PRODUTO_ID
JOIN PRODUTOS P
ON P.ID = CP.FK_PRODUTO_ID
JOIN COTACOES C
ON C.ID = CP.FK_COTACAO_ID
WHERE C.ID = 44
AND CV.PRECO = (SELECT MIN(PRECO)
FROM COTACOES_VENDEDORES COTV
JOIN COTACOES_PRODUTOS COTP
ON COTP.ID = COTV.FK_COTACAO_PRODUTO_ID
WHERE COTP.FK_PRODUTO_ID = P.ID)
GROUP BY P.ID
ORDER BY CV.PRECO ASC [/code]
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
Bbruno
Bbruno General de Pijama Registrado
3.2K Mensagens 102 Curtidas
#5 Por Bbruno
02/04/2016 - 12:42
esquiloesperto disse:
O código SQL:

[code=sql]SELECT CV.*, P.DESCRICAO, U.NOME
FROM COTACOES_VENDEDORES CV
JOIN USUARIOS U
ON U.ID = CV.FK_USUARIO_ID
JOIN COTACOES_PRODUTOS CP
ON CP.ID = CV.FK_COTACAO_PRODUTO_ID
JOIN PRODUTOS P
ON P.ID = CP.FK_PRODUTO_ID
JOIN COTACOES C
ON C.ID = CP.FK_COTACAO_ID
WHERE C.ID = 44
AND CV.PRECO = (SELECT MIN(PRECO)
FROM COTACOES_VENDEDORES COTV
JOIN COTACOES_PRODUTOS COTP
ON COTP.ID = COTV.FK_COTACAO_PRODUTO_ID
WHERE COTP.FK_PRODUTO_ID = P.ID)
GROUP BY P.ID
ORDER BY CV.PRECO ASC [/code]


Muito obrigado esquiloesperto, eu havia tentado fazer assim mas acho que esqueci algum JOIN.
Show de bola cara!





att
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal