Задать вопрос
@artyomkulakov

Как правильно сформулировать SQL запрос?

Есть 3 таблицы:
1) товары goods(id,name)
2) магазины shops(id, name)
3) остатки residues(shop_id, good_id, quantity, price)

Задача следующая:
Есть произвольное количество идентификаторов (id) товаров и необходимое количество (quantity) каждого из товаров
Например:
id[1] = 1, quantity[1] = 2;
id[2] = 5, quantity[2] = 1;
id[3] = 6, quantity[3] = 1;
Необходимо выбрать идентификаторы магазинов, где есть все товары и отсортировать их в порядке возрастания суммарной стоимости (quantity[1] * price[1] + ... + quantity[N] * price[N])
До меня просто не доходит (скорее знаний не хватает), как можно в минимальное кол-во действий (а желательно в одном запросе) это сделать :(
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    PRO C#. Базы данных
    2 месяца
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Java-разработчик + ИИ
    9 месяцев
    Далее
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По каждому товару находите shop_id и price для тех магазинов, где есть достаточное количество товара, затем находите пересечение (JOIN) этих магазинов. Получившуюся таблицу сортируете по стоимости. Так как число товаров может быть разным, то запрос надо строить каждый раз из фрагментов. В результате должно получиться что-то вроде
SELECT `s`.`id`, `s`.`name`
  FROM `shops` AS `s`
    JOIN `residues` AS `r1` 
      ON `r1`.`shop_id` = `s`.`id` AND `r1`.`good_id` = 1 AND `r1`.`quantity` >= 2
    JOIN `residues` AS `r2` 
      ON `r2`.`shop_id` = `s`.`id` AND `r2`.`good_id` = 5 AND `r2`.`quantity` >= 1
    ORDER BY `r1`.`price`*2+`r2`.`price*1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы