Вопрос № 78440: Приветствую уважаемых экспертов.
Вопрос такой.
Есть таблица товаров items с полями id, name, shop_id, price.
name - текстовое поле, значение которого часто повторяется.
Нужно создать запрос, который бы возвращал м...
Вопрос № 78.440
Приветствую уважаемых экспертов.
Вопрос такой.
Есть таблица товаров items с полями id, name, shop_id, price.
name - текстовое поле, значение которого часто повторяется.
Нужно создать запрос, который бы возвращал минимальную цену для каждого товара name и shop_id магазина, где продается товар по мин. цене.
Первое, что приходит в голову - такой запрос:
SELECT name, shop_id, MIN( price )
FROM items
GROUP BY name
Мин. цена определяется отлично, а вот shop_id при этом не соответствует магазину с мин. ценой. :( Похоже, mysql возвращает просто первое попавшееся значение для shop_id.
Как в данном случае правильно составить запрос?
P.S. В таблице ~7000 записей. Уникальных товаров ~700.
P.P.S. mysql 4.1
Приложение:
Отправлен: 15.03.2007, 16:10
Вопрос задал: Hurt (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 8)
Отвечает: Ерёмин Андрей
Здравствуйте, Hurt!
В данном случае можно использовать подзапросы. Вот пример:
SELECT `name`, `shop_id`,`price` FROM `items`
WHERE `price` = (SELECT MIN(`price`) FROM `items`)
Желаю удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Попробуйте так, у меня работает:
SELECT t1.* FROM items t1
JOIN (SELECT name, MIN(price) price FROM items GROUP BY name) t2 ON (t1.name = t2.name and t1.price = t2.price)
Единственная проблема - если будут существовать два магазина с минимальной ценой, то на экран в результат попадут 2 магазина - не знаю уж хорошо это или плохо - зависит от Вашей задачи
Ответ отправил: Pavel Maltsev (статус: 1-ый класс)
Ответ отправлен: 15.03.2007, 16:37 Оценка за ответ: 5
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Hurt!
Еремин Андрей предлагал Вам почти правильную идею реализации запроса.
Вот очень похожий запрос - но делает именно то, что Вам нужно.
SELECT `name` AS `namess`, `shop_id`, `price` FROM `items` WHERE `price`=(SELECT MIN(`price`) FROM `items` WHERE `name`=`namess`)