我正在使用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)的每种产品返回一行,并且仅通过单个查询就可以吗?
答案 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;