Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cezamar

SELECT no menor valor

Recommended Posts

Estou tentando fazr um site onde as pessoas possam comparar os preços dos produtos!Tipo assim! o mercado “B” a farinha custa R$ 1,00 e no “C” ela custa R$ 1,20, e eu gostaria de fazer uma consulta que me trouxesse o menor valor do deste produto!Exemplo:________________________| mercado | produto | Preço|| mercado_A | Arroz | R$ 1,20 || mercado_B | Arroz | R$ 1,10 || mercado_C | Arroz | R$ 1,00 || mercado_A | Feijão | R$ 2,20 || mercado_B | Feijão | R$ 2,10 || mercado_C | Feijão | R$ 2,50 |_________________________sendo que a consulta me trouxesse sempre o menor valor de cada produto! :mellow: Será que alguem poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysql> select *	-> from mercado;+-----------+---------+-------+| mercado   | produto | preco |+-----------+---------+-------+| mercado a | arroz   |  1.20 || mercado b | arroz   |  1.10 || mercado c | arroz   |  1.00 || mercado a | feijao  |  2.20 || mercado b | feijao  |  2.10 || mercado c | feijao  |  2.50 |+-----------+---------+-------+6 rows in set (0.00 sec)
Criei também o índice produto(preco):

create index produto on mercado(preco);
O explain:

+----+-------------+---------+------+---------------+---------+---------+-------+------+------------------------------+| id | select_type | table   | type | possible_keys | key	 | key_len | ref   | rows | Extra						|+----+-------------+---------+------+---------------+---------+---------+-------+------+------------------------------+|  1 | PRIMARY	 | mercado | ref  | produto	   | produto | 6	   | const |	1 | Using where				  ||  2 | SUBQUERY	| NULL	| NULL | NULL		  | NULL	| NULL	| NULL  | NULL | Select tables optimized away |+----+-------------+---------+------+---------------+---------+---------+-------+------+------------------------------+

Select tables optimized away

 

The query contained only aggregate functions (MIN(), MAX()) that were all resolved using an index, or COUNT(*) for MyISAM, and no GROUP BY clause. The optimizer determined that only one row should be returned.

Então a query ficaria:

SELECT * FROM mercado WHERE preco = (SELECT MIN(preco) FROM mercado);+-----------+---------+-------+| mercado   | produto | preco |+-----------+---------+-------+| mercado c | arroz   |  1.00 |+-----------+---------+-------+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

Fiz uma cópia simplificada da query que uso para selecionar o menor preço dentre os informados por diferentes fornecedores para os mesmos produtos que o gerente de um supermercado esteja cotando:

 

select cotacao.fornecedor, cotacao.codigoean, cotacao.produto, consulta1.minprecofrom cotacao cotacaoinner join  (select min(precoliquido) minpreco, codigoean   from cotacao   group by codigoean  ) as consulta1on (cotacao.codigoean=consulta1.codigoean and cotacao.precoliquido=consulta1.minpreco)

Acima, a subquery "consulta1" seleciona o menor preço informado pelos fornecedores;

A query principal "liga" os produtos cotados apenas com os produtos com menor preço... assim, podem ocorrer repetições (quando há empate nos menores preços)...

 

Por exemplo, inserindo estes dados:

 

0,MARBO,7896541311193,NECTAR DE PESSEGO LIGHT JUSSY,0.85

0,MARBO,7896072900439,NECTAR DE MARACUJA JUSSY,0.60

0,MARBO,7896072900606,NECTAR DE UVA LIGHT JUSSY,0.98

0,MARTINS,7896541311193,NECTAR DE PESSEGO LIGHT JUSSY,0.66

0,MARTINS,7896072900439,NECTAR DE MARACUJA JUSSY,0.60

0,MARTINS,7896072900606,NECTAR DE UVA LIGHT JUSSY,0.88

0,ZAMBONI,7896541311193,NECTAR DE PESSEGO LIGHT JUSSY,0.77

0,ZAMBONI,7896072900439,NECTAR DE MARACUJA JUSSY,0.59

0,ZAMBONI,7896072900606,NECTAR DE UVA LIGHT JUSSY,1.10

0,AURORA,7896541311193,NECTAR DE PESSEGO LIGHT JUSSY,0.66

 

load data infile "c:\\temp\\importar.txt" into table `acme`.`cotacao`

fields terminated by ",";

 

Teríamos esse resultado:

 

CodigoEAN Produto Menor Preço Fornecedor

7896072900439 NECTAR DE MARACUJA JUSSY 0,59 ZAMBONI

7896072900606 NECTAR DE UVA LIGHT JUSSY 0,88 MARTINS

7896541311193 NECTAR DE PESSEGO LIGHT JUSSY 0,66 MARTINS

7896541311193 NECTAR DE PESSEGO LIGHT JUSSY 0,66 AURORA

 

Ok?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.