BhSite - Tutorial de MySql - pag07 <a href="http://www.bhsite.com.br">hospedagem</a> DE <a href="http://www.bhsite.com.br">sites</a> REGISTRO DE DOMINIO GRATIS

Via Boleto Bancário
Login:
Senha:
Hospedagem de Sites
- Estrutura
- Contratar
- Planos
- Revenda
Registro de Domínios
- Registre seu Domínio
Suporte
- Help Desk
- Atendimento via E-mail
Atendimento Telefônico
Atendimento Telefônico

Suporte BHSite (Hospedagem de Sites)
 


Guia passo a passo do MySQL


Tutorial de MySQL

 

Página 7

|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+

 

As filas com grupos de campos de valor máximo

"Para cada artigo, encontre o(s) negociante(s) com o preço mais caro."

No ANSI SQL, pode fazer isto com um sub-query:

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article)

No MySQL é melhor ser feito em vários passos:
1. Obtenha a lista de artigo e preço máximo.
2. Para cada artigo obtenha as filas correspondentes que têm o preço máximo armazenado.

Isto pode ser facilmente feito com uma tabela temporária:

CREATE TEMPORARY TABLE tmp (
        article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
        price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);

LOCK TABLES article read;

INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;

SELECT article, dealer, price FROM shop, tmp

WHERE shop.article=tmp.article AND shop.price=tmp.price;

UNLOCK TABLES;

DROP TABLE tmp;

Se você usar uma tabela TEMPORÁRIA, você deve também fechar o "tmp" tabela.
"Isto pode ser feito com uma pergunta única?"
Sim, mas pode usar um truque ineficiente que é chamado de "MAX-CONCAT trick":

SELECT article,
       SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
  0.00+LEFT(      MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
FROM shop
GROUP BY article;

+---------+--------+-------+

 



hospedagem de sites E REGISTRO DE DOMÍNIO GRATIS É NA BHSITE.COM.BR