Mysql查询使用UNION运算符从多个条件中获取最低值

时间:2016-08-29 14:05:19

标签: mysql

我的价格表有三列:

id, price, product_id. 

product_id可以包含多个价格。

当在mysql中执行查询时,我需要获得最低价格的product_id。

我在这个表中使用UNION运算符使用多个条件数据即将到来,但结果是错误的。

在此表中,product_id 101有4999但我得到5000,即使我已按价格ASC设置订单

这是我的mysql小提琴链接 mysql fiddle

3 个答案:

答案 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;

SQL fiddle

答案 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

SQL FIDDLE

...否则

Select product_ID, Min(Price) as price from `price` group by Product_ID

SQL FIDDLE

----更新----

仍然不确定我理解这个问题...这就是为什么我根据你的数据要求预期的输出。我或许可以推断出我没有得到的要求。目前我不知道为什么需要一个工会,也不知道这个"分组"发挥了作用。

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

SQL Fiddle

假设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