SQL Comparação

Delphi

14/09/2010

Boa Tarde
Amigos

Estou precisando de uma ajuda de vcs,tenho a seguinte tabela com os campos


 "TB_empresa"

Id
empresa
produto
valor
 
Empresa  produto     valor

x         1         R$ 300
x         2         R$ 400
x         3         R$ 500

Y         1         R$ 150
Y         2         R$ 200
Y         3         R$ 600


como montar uma consulta em que me a pesquisa seria feita pelo produto ex.( 1 ) e me retorna-se a empresa com menor custo.

Ex : resultado da consulta

produto  empresa     valor:  
   1            Y             R$ 150  

Produto 1  da empresa Y é mais barato   

Grato 
 
Frost

Frost

Curtidas 0

Respostas

Eduardo Marcolongo

Eduardo Marcolongo

14/09/2010

Eu fiz um teste assim e retornou certo:
select first 1 empresa, produto, min(preco) from tb_empresa where produto = '1'group by empresa, produtoorder by min(preco)

GOSTEI 0
Wilson Junior

Wilson Junior

14/09/2010

SELECT FIRST 1
  ID,
  Empresa,
  Produto,
  MIN(Valor) AS MenorValor
FROM
  TB_empresa
WHERE
  Produto = 1
GROUP BY
  ID,
  Empresa,
  Produto
ORDER BY
  MenorValor


Espero ter colaborado.
GOSTEI 0
Wilson Junior

Wilson Junior

14/09/2010

Caramba, o pessoal ta rápido no gatilho hein....que bom.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

14/09/2010

SELECT FIRST 1
  Empresa,
  Produto,
  MIN(Valor) AS MenorValor
FROM
  TB_empresa
WHERE
  Produto = 1
GROUP BY
  Empresa,
  Produto
ORDER BY
  MenorValor Retirei o Id, senão ia agrupar pois um id é diferente do outro
GOSTEI 0
Wilson Junior

Wilson Junior

14/09/2010

E qual a diferença em ter ou não o ID?
Se tendo ID diferentes ele iria agrupar, o que acontecerá se tiver "Empresa + Produto" sempre diferentes?

Em ambos os casos ele irá agrupar corretamente, a diferença de ter o ID ou não é se você quer que retorne o campo ID ou não.


Não poderia deixar de colocar esta resalva.

Espero ter colaborado.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/09/2010

precisa do GROUP BY ???? Não basta ordenar?

SELECT FIRST 1 *
FROM  TB_empresa
WHERE  Produto = '1'
ORDER BY Valor

com a instrução acima você sabe qual empresa tem o produto 1 com o menor preço.

agora se você quiser saber quais são os produtos mais baratos, tente:

SELECT TB1.*
FROM  TB_empresa TB1
WHERE TB1.Valor =
  (select min(TB2.Valor)
   from TB_empresa TB2
   where TB2.Produto = TB1.Produto)

observe que a cláusula FIRST serve para o FIREBIRD, enquanto que para o SQL SERVER deve-se usar TOP.

GOSTEI 0
Wilson Junior

Wilson Junior

14/09/2010

Não precisaria do GROUP BY, tinha pegado um caso real e colocado sem analisar.

ÓTIMA observação Emerson.
GOSTEI 0
Frost

Frost

14/09/2010

Boa Tarde Amigos   Obrigado a todos   funcionou certinho ak  :)      
GOSTEI 0
POSTAR