Операции с таблицей, максимальное значение

Максимальное значение столбца article таблицы shop

SELECT MAX(article) AS article FROM shop
 
+---------+
| article |
+---------+
|       4 |
+---------+

Строка, содержащая максимальное значение некоторого столбца

“Как определить номер, дилера и цену самого дорогого изделия?”

SELECT article, dealer, price
FROM   shop
WHERE  price=19.95

Существует еще одно решение: отсортировать все строки по убыванию цен и после этого получить первую строку, используя специальный оператор LIMIT:

SELECT article, dealer, price
FROM   shop
ORDER BY price DESC
LIMIT 1

Но если существует несколько самых дорогих изделий (например, каждое из них стоит 19,95), запрос, использующий LIMIT, возвращает лишь одно из них.

Максимальное значение столбца для группы

“Как определить наибольшую цену по каждому изделию?”

SELECT article, MAX(price) AS price
FROM   shop
GROUP BY article
 
+---------+-------+
| article | price |
+---------+-------+
|    0001 |  3.99 |
|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+

“Для каждого изделия, как определить дилер(ов) с самыми высокими ценами?”
В 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.

Добавить комментарий