我的价格表有三列:
id, price, product_id.
product_id
可以包含多个价格。
当在mysql中执行查询时,我需要获得最低价格的product_id。
我在这个表中使用UNION运算符使用多个条件数据即将到来,但结果是错误的。
在此表中,product_id 101有4999但我得到5000,即使我已按价格ASC设置订单
这是我的mysql小提琴链接 mysql fiddle
答案 0 :(得分:1)
这是非常基本的SQL。
select product_id, min(price) as price
from price
group by product_id;
要获取给定范围的每个产品的最低价格,请将它们添加到group by子句中的case语句中:
select product_id, min(price) as price
from price
group by product_id, case when price between 100 and 5000 then 1 else 2 end;
答案 1 :(得分:0)
假设您需要具有最低价格的每条记录的ID。
Select p.* from price p
INNER JOIN (Select product_ID, Min(Price) as price from `price` group by Product_ID) sub
on sub.product_Id = p.product_Id
and sub.price = p.price
...否则
Select product_ID, Min(Price) as price from `price` group by Product_ID
----更新----
仍然不确定我理解这个问题...这就是为什么我根据你的数据要求预期的输出。我或许可以推断出我没有得到的要求。目前我不知道为什么需要一个工会,也不知道这个"分组"发挥了作用。
SELECT p.* from price p
INNER JOIN (Select product_ID, Min(Price) as price from `price` group by Product_ID) sub
on sub.product_Id = p.product_Id
and sub.price = p.price
假设product_ID在范围内没有重叠......
答案 2 :(得分:0)
SELECT pr.id,MIN(pr.price),pr.product_id FROM price pr WHERE pr.price> = 100 AND pr.price< = 5000 group by pr.product_id UNION SELECT pr.id,MIN( pr.price),pr.product_id FROM price pr WHERE pr.price> = 5001 AND pr.price< = 10000 group by pr.product_id