从产品和该价格的提供商那里获得最低价格

时间:2021-01-29 11:51:14

标签: mysql sql product min

我正在查询学校作业,其中我选择低于最低库存的产品,然后我选择以最低价格提供每种产品的供应商。

这些是桌子。

+------------+ +------------------+ +------------+
| products | | product_overview | | provider |
+------------+ +------------------+ +------------+
| productID | | productID | | providerID |
| name | | providerID | | name |
| stock | | price | +------------+
| min_stock | +------------------+
+------------+

这是我目前所拥有的。

SELECT p.name, pr.name
FROM products p JOIN product_overview po ON p.productID = po.productID
JOIN provider l ON po.providerID = pr.providerID
WHERE p.stock < p.min_stock
GROUP BY po.productID
ORDER BY p.name;

我先查找哪些产品具有 stock < min_stock,然后再查找提供商。目前,输出中给出的提供商不是以最低价格提供产品的提供商。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式使用 not exists

SELECT p.name, pr.name provider_name, po.price
  FROM products p JOIN product_overview po ON p.productID = po.productID
  JOIN provider pr ON po.providerID = pr.providerID
 WHERE p.stock < p.min_stock
   AND not exists 
      (select 1 from product_overview poo 
        where poo.productID = po.productID 
          and poo.price < po.price)

答案 1 :(得分:0)

最简单的方法是使用窗口函数:

SELECT pp.*
FROM (SELECT p.name as product_name, pr.name as provider_name,
             ROW_NUMBER() OVER (PARTITION BY p.productID ORDER BY po.price ASC) as seqnum
      FROM products p JOIN 
           product_overview po
           ON p.productID = po.productID JOIN
           provider pr
           ON po.providerID = pr.providerID
      WHERE p.stock < p.min_stock
     ) pp
WHERE seqnum = 1
ORDER BY p.name;