SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.05.2018 10:08:39

olegtor5
Участник
Зарегистрирован: 14.05.2018
Сообщений: 2

Выборка наилучшего товара

Доброго времени суток!
Есть таблица для временного хранения списка товаров:
CREATE TABLE `products` (
  `item_number` varchar(15) NOT NULL,
  `article` varchar(101) NOT NULL,
  `price` float NOT NULL,
  `srok_ot` smallint(6) NOT NULL,
  `nal` mediumint(9) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

ALTER TABLE `products`
  ADD PRIMARY KEY (`item_number`);

Необходимо для каждого `article` найти товар с самым маленьким сроком доставки при этом наименьшей ценой и наибольшим наличием, то есть аналог ORDER BY `srok_ot` ASC, `price` ASC, `nal` DESC

Пример таблицы:
item_number|article|price|srok_ot|nal
1|C110|1000|1|20
2|C110|500|2|30
3|C110|1500|1|50
4|C110|1000|1|20

Выбрать надо 1|C110|1000|1|20 или 4|C110|1000|1|20

Неактивен

 

#2 14.05.2018 11:16:08

olegtor5
Участник
Зарегистрирован: 14.05.2018
Сообщений: 2

Re: Выборка наилучшего товара

Решил задачу таким образом, но оптимальность под вопросом:
ALTER TABLE `products`
  ADD KEY `index1` (`article`);

SELECT
    `products_main`.`item_number`,
    `products_main`.`article`,
    `products_main`.`price`,
    `products_main`.`srok_ot`,
    `products_main`.`nal`
FROM
    `products` AS `products_main`
WHERE
    `products_main`.`item_number` = (SELECT
    `products_vlozh`.`item_number`
FROM
    `products` AS `products_vlozh`
WHERE
    `products_vlozh`.`article` = `products_main`.`article`
ORDER BY
    `products_vlozh`.`srok_ot` ASC,
    `products_vlozh`.`price` ASC,
    `products_vlozh`.`nal` DESC
LIMIT 1);

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson