ХОСТИНГ

99mb.ru

ТАРИФЫРЕГИСТРАЦИЯСТАТЬ ПАРТНЕРОМПОДДЕРЖКА

Документация MySQL


3.5.3 Максимальное значение столбца для группы Оглавление 3.5.5 Использование пользовательских переменных


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;

    Если вы не используете ключевое слово TEMPORARY, вам также следует поставить блокировку на таблицу 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 | +---------+--------+-------+

    Разумеется, последний пример можно сделать чуть эффективнее, если разбиение катенизированной строки делать на стороне клиента.


    3.5.3 Максимальное значение столбца для группы Оглавление 3.5.5 Использование пользовательских переменных


    Документация Apache
    Документация MySQL
    Документация PHP






  • Всего за $ 9,99 в месяц Вы получаете качественный хостинг, множество полезных сервисов и возможность участия в партнерской программе.

    Зарабатывайте на нас деньги!

     

    Также только у нас Вы можете воспользоваться уникальной акцией: