选择查询每个产品仅返回一个结果?

时间:2020-10-20 11:52:53

标签: mysql sql

我正在使用MySQL数据库,必须在其中建立表。包含唯一产品的产品表和包含每种产品几个价格的价格表。

今天我使用以下查询,该查询将返回行中每种产品的价格表中存在的多种不同价格:

SELECT product.id as id, price.unit_price as price
FROM product 
   INNER JOIN price 
     ON price.product_id=product.id 
WHERE category_id = 234

如何更改此查询以仅对价格表中具有最低价格(price.unit_price)的每种产品返回一行,并且仅通过单个查询就可以吗?

2 个答案:

答案 0 :(得分:3)

这可能是最简单的方法:

SELECT product.id as id, min(price.unit_price) as price
FROM product 
   INNER JOIN price 
     ON price.product_id=product.id 
WHERE category_id = 234
group by product.id

答案 1 :(得分:2)

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

SELECT p.id as id, pr.unit_price as price 
FROM product p INNER JOIN
     (SELECT pr.*,
             ROW_NUMBER() OVER (PARTITION BY pr.product_id ORDER BY pr.unit_price DESC) as seqnum
      FROM price pr
     ) pr
     ON pr.product_id = p.id AND seqnum = 1
WHERE p.category_id = 234;

这使您可以从任一表中引入其他列。否则,只需使用聚合:

SELECT p.id as id, MIN(pr.unit_price) as price 
FROM product p INNER JOIN
     price pr
     ON pr.product_id = p.id
WHERE p.category_id = 234;