|
|
Справочное руководство по MySQL3.5.4 Строка, содержащая максимальное значение некоторого столбца
3.5.4 Строка, содержащая максимальное значение некоторого столбца"Для каждого изделия, как определить дилер(ов) с самыми высокими ценами?" В ANSI SQL это легко делается при помощи вложенного запроса: SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article); В MySQL такая задача выполняется в два этапа:
Это легко делается с помощью временной таблицы: CREATE TEMPORARY TABLE tmp ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL); LOCK TABLES shop read; INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article; SELECT shop.article, dealer, shop.price FROM shop, tmp WHERE shop.article=tmp.article AND shop.price=tmp.price; UNLOCK TABLES; DROP TABLE tmp;
Если вы не используете ключевое слово "А можно ли это сделать одним запросом?" Да, но только используя совершенно неэффективный трюк, который я называю "Трюк MAX-CONCAT": 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; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | C | 1.69 | | 0004 | D | 19.95 | +---------+--------+-------+ Разумеется, последний пример можно сделать чуть эффективнее, если разбиение катенизированной строки делать на стороне клиента.
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2008-2010 Prime Hosting |
![]() Хостинг Реселлинг хостинга VPS - Хостинг Аренда серверов Dedicated server |